C# Language
Windows Communication Foundation
Sök…
Introduktion
Windows Communication Foundation (WCF) är ett ramverk för att bygga tjänstorienterade applikationer. Med WCF kan du skicka data som asynkrona meddelanden från en tjänständpunkt till en annan. En servicens slutpunkt kan vara en del av en kontinuerligt tillgänglig tjänst som värd av IIS, eller det kan vara en tjänst som är värd i en applikation. Meddelandena kan vara så enkla som ett enda tecken eller ord som skickas som XML, eller så komplexa som en ström av binär data.
Kom igång prov
Tjänsten beskriver de operationer som den utför i ett serviceavtal som den exponerar offentligt som metadata.
// Define a service contract.
[ServiceContract(Namespace="http://StackOverflow.ServiceModel.Samples")]
public interface ICalculator
{
[OperationContract]
double Add(double n1, double n2);
}
Tjänsteimplementeringen beräknar och returnerar rätt resultat, som visas i följande exempelkod.
// Service class that implements the service contract.
public class CalculatorService : ICalculator
{
public double Add(double n1, double n2)
{
return n1 + n2;
}
}
Tjänsten avslöjar en slutpunkt för kommunikation med tjänsten, definierad med en konfigurationsfil (Web.config), som visas i följande provkonfiguration.
<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>
Ramverket exponerar inte metadata som standard. Som sådan aktiverar tjänsten ServiceMetadataBehavior och exponerar en metadata-utbytes (MEX) slutpunkt på http: //localhost/servicemodelsamples/service.svc/mex . Följande konfiguration visar detta.
<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>
Klienten kommunicerar med en given kontraktstyp med en klientklass som genereras av ServiceModel Metadata Utility Tool (Svcutil.exe).
Kör följande kommando från SDK-kommandotolken i klientkatalogen för att generera den skrivna proxy:
svcutil.exe /n:"http://StackOverflow.ServiceModel.Samples,StackOverflow.ServiceModel.Samples" http://localhost/servicemodelsamples/service.svc/mex /out:generatedClient.cs
Liksom tjänsten använder klienten en konfigurationsfil (App.config) för att specificera slutpunkten som den vill kommunicera med. Klientens slutpunktkonfiguration består av en absolut adress för servicens slutpunkt, bindningen och kontraktet, som visas i följande exempel.
<client>
<endpoint
address="http://localhost/servicemodelsamples/service.svc"
binding="wsHttpBinding"
contract="StackOverflow.ServiceModel.Samples.ICalculator" />
</client>
Klientimplementeringen initierar klienten och använder det typade gränssnittet för att börja kommunicera med tjänsten, som visas i följande exempelkod.
// 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();