Поиск…


Вступление

Windows Communication Foundation (WCF) - это основа для создания сервис-ориентированных приложений. Используя WCF, вы можете отправлять данные как асинхронные сообщения с одной конечной точки службы на другую. Конечная точка службы может быть частью постоянно доступной службы, размещенной в IIS, или может быть службой, размещенной в приложении. Сообщения могут быть такими же простыми, как один символ или слово, отправленное как XML, или сложное, как поток двоичных данных.

Начало работы с образцом

Служба описывает операции, которые он выполняет в контракте на обслуживание, который он публично раскрывает как метаданные.

// Define a service contract.  
[ServiceContract(Namespace="http://StackOverflow.ServiceModel.Samples")]  
public interface ICalculator  
{  
    [OperationContract]  
    double Add(double n1, double n2);
}

Реализация службы вычисляет и возвращает соответствующий результат, как показано в следующем примере кода.

// Service class that implements the service contract.  
public class CalculatorService : ICalculator  
{  
    public double Add(double n1, double n2)  
    {  
        return n1 + n2;  
    }
}

Служба предоставляет конечную точку для связи с сервисом, определенную с использованием файла конфигурации (Web.config), как показано в следующей примерной конфигурации.

<services>  
    <service   
        name="StackOverflow.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="StackOverflow.ServiceModel.Samples.ICalculator" />  
       ...  
    </service>  
</services>

Структура не предоставляет метаданные по умолчанию. Таким образом, служба включает ServiceMetadataBehavior и предоставляет конечную точку обмена метаданными (MEX) по адресу http: //localhost/servicemodelsamples/service.svc/mex . Следующая конфигурация демонстрирует это.

<system.serviceModel>  
  <services>  
    <service   
        name="StackOverflow.ServiceModel.Samples.CalculatorService"  
        behaviorConfiguration="CalculatorServiceBehavior">  
      ...  
      <!-- the mex endpoint is explosed 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).

Выполните следующую команду из командной строки SDK в каталоге клиента, чтобы создать типизированный прокси:

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

Как и сервис, клиент использует файл конфигурации (App.config), чтобы указать конечную точку, с которой он хочет общаться. Конфигурация конечной точки клиента состоит из абсолютного адреса для конечной точки службы, привязки и контракта, как показано в следующем примере.

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

Клиентская реализация создает экземпляр клиента и использует типизированный интерфейс для начала связи с сервисом, как показано в следующем примере кода.

// 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); 

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


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow