C# Language
Windows Communication Foundation
Szukaj…
Wprowadzenie
Windows Communication Foundation (WCF) to środowisko do budowania aplikacji zorientowanych na usługi. Korzystając z WCF, możesz wysyłać dane jako wiadomości asynchroniczne z jednego punktu końcowego usługi do drugiego. Punkt końcowy usługi może być częścią stale dostępnej usługi hostowanej przez IIS lub może być usługą hostowaną w aplikacji. Wiadomości mogą być tak proste jak pojedynczy znak lub słowo wysyłane jako XML lub tak złożone jak strumień danych binarnych.
Próbka rozpoczęcia pracy
Usługa opisuje operacje, które wykonuje, w umowie serwisowej, którą udostępnia publicznie jako metadane.
// Define a service contract.
[ServiceContract(Namespace="http://StackOverflow.ServiceModel.Samples")]
public interface ICalculator
{
[OperationContract]
double Add(double n1, double n2);
}
Implementacja usługi oblicza i zwraca odpowiedni wynik, jak pokazano w poniższym przykładowym kodzie.
// Service class that implements the service contract.
public class CalculatorService : ICalculator
{
public double Add(double n1, double n2)
{
return n1 + n2;
}
}
Usługa udostępnia punkt końcowy do komunikacji z usługą, zdefiniowany przy użyciu pliku konfiguracyjnego (Web.config), jak pokazano w poniższej przykładowej konfiguracji.
<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>
Struktura domyślnie nie ujawnia metadanych. W związku z tym usługa włącza ServiceMetadataBehavior i udostępnia punkt końcowy wymiany metadanych (MEX) pod adresem http: //localhost/servicemodelsamples/service.svc/mex . Poniższa konfiguracja to pokazuje.
<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>
Klient komunikuje się przy użyciu danego typu umowy przy użyciu klasy klienta generowanej przez narzędzie ServiceModel Metadata Utility Tool (Svcutil.exe).
Uruchom następujące polecenie z wiersza polecenia SDK w katalogu klienta, aby wygenerować wpisane proxy:
svcutil.exe /n:"http://StackOverflow.ServiceModel.Samples,StackOverflow.ServiceModel.Samples" http://localhost/servicemodelsamples/service.svc/mex /out:generatedClient.cs
Podobnie jak usługa, klient używa pliku konfiguracyjnego (App.config), aby określić punkt końcowy, z którym chce się komunikować. Konfiguracja punktu końcowego klienta składa się z adresu bezwzględnego punktu końcowego usługi, powiązania i umowy, jak pokazano w poniższym przykładzie.
<client>
<endpoint
address="http://localhost/servicemodelsamples/service.svc"
binding="wsHttpBinding"
contract="StackOverflow.ServiceModel.Samples.ICalculator" />
</client>
Implementacja klienta tworzy instancję klienta i korzysta z tekstowego interfejsu, aby rozpocząć komunikację z usługą, jak pokazano w poniższym przykładowym kodzie.
// 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();