Пример для начала работыGetting Started Sample

В начало работы примере демонстрируется реализация типичной службы и стандартного клиента с помощью Windows Communication Foundation (WCF).The Getting Started sample demonstrates how to implement a typical service and a typical client using Windows Communication Foundation (WCF). Этот образец является основой для всех остальных базовых образцов технологий.This sample is the basis for all other basic technology samples.

Примечание

Процедура настройки и инструкции по построению для данного образца приведены в конце этого раздела.The setup procedure and build instructions for this sample are located at the end of this topic.

Важно!

Образцы уже могут быть установлены на компьютере.The samples may already be installed on your computer. Перед продолжением проверьте следующий каталог (по умолчанию).Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Если этот каталог не существует, перейдите к примерам Windows Communication Foundation (WCF) и Windows Workflow Foundation (WF) для .NET Framework 4 , чтобы скачать все Windows Communication Foundation (WCF) WFWF и примеры.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF) and WFWF samples. Этот образец расположен в следующем каталоге.This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WCF\Basic\GettingStarted\GettingStarted

Служба описывает операции, выполняемые ею в контракте службы, который она открыто предоставляет как метаданные.The service describes the operations it performs in a service contract that it exposes publicly as metadata. Служба также содержит код для реализации операций.The service also contains the code to implement the operations.

Клиент содержит определение контракта службы и прокси-класс для доступа к службе.The client contains a definition of the service contract and a proxy class for accessing the service. Код прокси-сервера создается на основе метаданных службы с помощью средства служебной программы метаданных ServiceModel (Svcutil. exe).The proxy code is generated from the service metadata using the ServiceModel Metadata Utility Tool (Svcutil.exe).

В Windows VistaWindows Vista служба размещается в службе активации Windows (WAS).On Windows VistaWindows Vista, the service is hosted in the Windows Activation Service (WAS). В Windows XPWindows XP и Windows Server 2003Windows Server 2003 она размещается в службах IIS и ASP.NET.On Windows XPWindows XP and Windows Server 2003Windows Server 2003, it is hosted by Internet Information Services (IIS) and ASP.NET. Размещение службы в IIS или WAS позволяет активировать службу автоматически при первом доступе к ней.Hosting a service in IIS or WAS allows the service to be activated automatically when it is accessed for the first time.

Примечание

Если вы предпочитаете приступить к работе с примером, в котором размещена служба, в консольном приложении, а не IIS, см. пример с помощью узла для самостоятельного размещения .If you would prefer to get started with a sample that hosts the service in a console application instead of IIS, see the Self-Host sample.

Служба и клиент указывают данные для доступа в параметрах файла конфигурации, что обеспечивает гибкость при развертывании.The service and client specify access details in configuration file settings, which provide flexibility at the time of deployment. Эти данные включают определение конечной точки, задающей адрес, привязку и контракт.This includes an endpoint definition that specifies an address, binding, and contract. Привязка определяет транспорт и детали обеспечения безопасности, касающиеся доступа к службе.The binding specifies transport and security details for how the service is to be accessed.

Служба настраивает среду выполнения на публикацию ее метаданных.The service configures a run-time behavior to publish its metadata.

Служба реализует контракт, определяющий шаблон взаимодействия "запрос-ответ".The service implements a contract that defines a request-reply communication pattern. Контракт определяется интерфейсом ICalculator, который предоставляет математические операции (сложение, вычитание, умножение и деление).The contract is defined by the ICalculator interface, which exposes math operations (add, subtract, multiply, and divide). Клиент осуществляет вызовы заданной математической операции, а служба отправляет в ответ результат.The client makes requests to a given math operation and the service replies with the result. Служба реализует контракт ICalculator, определенный в следующем коде.The service implements an ICalculator contract that is defined in the following code.

' Define a service contract.
    <ServiceContract(Namespace:="http://Microsoft.Samples.GettingStarted")>
     Public Interface ICalculator
        <OperationContract()>
        Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double
        <OperationContract()>
        Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double
        <OperationContract()>
        Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double
        <OperationContract()>
        Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double
    End Interface
// Define a service contract.
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
    [OperationContract]
    double Add(double n1, double n2);
    [OperationContract]
    double Subtract(double n1, double n2);
    [OperationContract]
    double Multiply(double n1, double n2);
    [OperationContract]
    double Divide(double n1, double n2);
}

Реализация службы вычисляет и возвращает соответствующий результат, как показано в следующем примере кода.The service implementation calculates and returns the appropriate result, as shown in the following example code.

' Service class which implements the service contract.
Public Class CalculatorService
Implements ICalculator
Public Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Add
Return n1 + n2
End Function

Public Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Subtract
Return n1 - n2
End Function

Public Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Multiply
Return n1 * n2
End Function

Public Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Divide
Return n1 / n2
End Function
End Class
// Service class that implements the service contract.
public class CalculatorService : ICalculator
{
    public double Add(double n1, double n2)
    {
        return n1 + n2;
    }
    public double Subtract(double n1, double n2)
    {
        return n1 - n2;
    }
    public double Multiply(double n1, double n2)
    {
        return n1 * n2;
    }
    public double Divide(double n1, double n2)
    {
        return n1 / n2;
    }
}

Служба предоставляет конечную точку для взаимодействия с ней; конечная точка определяется в файле конфигурации (Web.config). См. следующий образец конфигурации.The service exposes an endpoint for communicating with the service, defined using a configuration file (Web.config), as shown in the following sample configuration.

<services>
    <service
        name="Microsoft.ServiceModel.Samples.CalculatorService"
        behaviorConfiguration="CalculatorServiceBehavior">
        <!-- ICalculator is exposed at the base address provided by
         host: http://localhost/servicemodelsamples/service.svc.  -->
       <endpoint address=""
              binding="wsHttpBinding"
              contract="Microsoft.ServiceModel.Samples.ICalculator" />
       ...
    </service>
</services>

Служба предоставляет конечную точку по базовому адресу, который предоставляется узлом IIS или WAS.The service exposes the endpoint at the base address provided by the IIS or WAS host. Привязка настраивается с использованием стандартного объекта WSHttpBinding, обеспечивающего взаимодействие по протоколу HTTP и стандартному протоколу веб-служб для адресации и безопасности.The binding is configured with a standard WSHttpBinding, which provides HTTP communication and standard Web service protocols for addressing and security. Контрактом является интерфейс ICalculator, реализуемый службой.The contract is the ICalculator implemented by the service.

Как настроено, доступ к службе может осуществляться http://localhost/servicemodelsamples/service.svc клиентом на том же компьютере.As configured, the service can be accessed at http://localhost/servicemodelsamples/service.svc by a client on the same computer. Чтобы к службе могли получить доступ клиенты на удаленных компьютерах, вместо имени localhost необходимо указать полное имя домена.For clients on remote computers to access the service, a fully-qualified domain name must be specified instead of localhost.

По умолчанию платформа не предоставляет никаких метаданных.The framework does not expose metadata by default. Таким образом, служба включает ServiceMetadataBehavior и предоставляет конечную точку обмена метаданными (MEX) в. http://localhost/servicemodelsamples/service.svc/mexAs such, the service turns on the ServiceMetadataBehavior and exposes a metadata exchange (MEX) endpoint at http://localhost/servicemodelsamples/service.svc/mex. Это демонстрируется в следующей конфигурации.The following configuration demonstrates this.

<system.serviceModel>
  <services>
    <service
        name="Microsoft.ServiceModel.Samples.CalculatorService"
        behaviorConfiguration="CalculatorServiceBehavior">
      ...
      <!-- the mex endpoint is exposed at
       http://localhost/servicemodelsamples/service.svc/mex -->
      <endpoint address="mex"
                binding="mexHttpBinding"
                contract="IMetadataExchange" />
    </service>
  </services>

  <!--For debugging purposes set the includeExceptionDetailInFaults
   attribute to true-->
  <behaviors>
    <serviceBehaviors>
      <behavior name="CalculatorServiceBehavior">
        <serviceMetadata httpGetEnabled="True"/>
        <serviceDebug includeExceptionDetailInFaults="False" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
</system.serviceModel>

Клиент обменивается данными с использованием заданного типа контракта с помощью клиентского класса, созданного средством служебной программы метаданных ServiceModel (Svcutil. exe).The client communicates using a given contract type by using a client class that is generated by the ServiceModel Metadata Utility Tool (Svcutil.exe). Этот созданный клиент содержится в файлах generatedClient.cs или generatedClient.vb.This generated client is contained in the file generatedClient.cs or generatedClient.vb. Это средство извлекает метаданные для заданной службы и создает клиент, который будет использоваться клиентским приложением для взаимодействия по заданному контракту.This utility retrieves metadata for a given service and generates a client for use by the client application to communicate using a given contract type. Размещенная служба должна быть доступна для создания кода клиента, поскольку служба используется для извлечения обновленных метаданных.The hosted service must be available to generate the client code, because the service is used to retrieve the updated metadata.

Чтобы создать типизированный прокси, выполните следующую команду из командной строки SDK в каталоге клиента.Run the following command from the SDK command prompt in the client directory to generate the typed proxy:

svcutil.exe /n:"http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples" http://localhost/servicemodelsamples/service.svc/mex /out:generatedClient.cs

Чтобы создать клиент на языке Visual Basic, введите следующую команду в командной строке SDK.To generate client in Visual Basic type the following from the SDK command prompt:

Svcutil.exe /n:"http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples" http://localhost/servicemodelsamples/service.svc/mex /l:vb /out:generatedClient.vb

С помощью созданного клиента можно получить доступ к заданной конечной точке службы, настроив соответствующий адрес и привязку.By using the generated client, the client can access a given service endpoint by configuring the appropriate address and binding. Как и служба, клиент использует файл конфигурации (App.config), чтобы задать конечную точку для взаимодействия.Like the service, the client uses a configuration file (App.config) to specify the endpoint with which it wants to communicate. Конфигурация конечной точки клиента состоит из абсолютного адреса конечной точки службы, привязки и контракта, как показано в следующем примере.The client endpoint configuration consists of an absolute address for the service endpoint, the binding, and the contract, as shown in the following example.

<client>
     <endpoint
         address="http://localhost/servicemodelsamples/service.svc"
         binding="wsHttpBinding"
         contract=" Microsoft.ServiceModel.Samples.ICalculator" />
</client>

Реализация клиента создает клиент и использует интерфейс, чтобы начать взаимодействие со службой, как показано в следующем примере кода.The client implementation instantiates the client and uses the typed interface to begin communicating with the service, as shown in the following example code.

' Create a client
Dim client As New CalculatorClient()

' Call the Add service operation.
            Dim value1 = 100.0R
            Dim value2 = 15.99R
            Dim result = client.Add(value1, value2)
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result)

' Call the Subtract service operation.
value1 = 145.00R
value2 = 76.54R
result = client.Subtract(value1, value2)
Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result)

' Call the Multiply service operation.
value1 = 9.00R
value2 = 81.25R
result = client.Multiply(value1, value2)
Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result)

' Call the Divide service operation.
value1 = 22.00R
value2 = 7.00R
result = client.Divide(value1, value2)
Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result)

'Closing the client gracefully closes the connection and cleans up resources
// Create a client.
CalculatorClient client = new CalculatorClient();

// Call the Add service operation.
double value1 = 100.00D;
double value2 = 15.99D;
double result = client.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);

// Call the Subtract service operation.
value1 = 145.00D;
value2 = 76.54D;
result = client.Subtract(value1, value2);
Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result);

// Call the Multiply service operation.
value1 = 9.00D;
value2 = 81.25D;
result = client.Multiply(value1, value2);
Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result);

// Call the Divide service operation.
value1 = 22.00D;
value2 = 7.00D;
result = client.Divide(value1, value2);
Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result);

//Closing the client releases all communication resources.
client.Close();

При выполнении примера запросы и ответы операций отображаются в окне консоли клиента.When you run the sample, the operation requests and responses are displayed in the client console window. Чтобы закрыть клиент, нажмите клавишу ВВОД в окне клиента.Press ENTER in the client window to shut down the client.

Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714

Press <ENTER> to terminate client.

В образце "Начало работы" показан стандартный способ создания службы и клиента.The Getting Started sample shows the standard way to create a service and client. Другой базовый пример сборки этого образца для демонстрации конкретных функций продукта.The other Basic build on this sample to demonstrate specific product features.

Настройка, сборка и выполнение образцаTo set up, build, and run the sample

  1. Убедитесь, что вы выполнили однократную процедуру настройки для Windows Communication Foundation примеров.Ensure that you have performed the One-Time Setup Procedure for the Windows Communication Foundation Samples.

  2. Чтобы создать выпуск решения на языке C# или Visual Basic .NET, следуйте инструкциям в разделе Building the Windows Communication Foundation Samples.To build the C# or Visual Basic .NET edition of the solution, follow the instructions in Building the Windows Communication Foundation Samples.

  3. Чтобы запустить пример в конфигурации с одним или несколькими компьютерами, следуйте инструкциям в разделе выполнение примеров Windows Communication Foundation.To run the sample in a single- or cross-computer configuration, follow the instructions in Running the Windows Communication Foundation Samples.

См. такжеSee also