Klient ASMX se službou WCF
Ukázka ASMX ukazuje, jak vytvořit službu pomocí technologie Windows Communication Foundation (WCF) a pak přistupovat ke službě z klienta jiného než WCF, například z klienta ASMX.
Poznámka:
Postup nastavení a pokyny k sestavení pro tuto ukázku najdete na konci tohoto tématu.
Tato ukázka se skládá z programu konzoly klienta (.exe) a knihovny služeb (.dll) hostované službou Internetová informační služba (IIS). Služba implementuje kontrakt, který definuje komunikační vzor žádosti a odpovědi. Kontrakt je definován ICalculator
rozhraním, které zveřejňuje matematické operace (Add
, Subtract
, Multiply
, a Divide
). Klient ASMX provádí synchronní požadavky na matematickou operaci a služba odpoví výsledkem.
Služba implementuje ICalculator
kontrakt definovaný v následujícím kódu.
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples"), XmlSerializerFormat]
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);
}
Typy DataContractSerializer CLR a XmlSerializer mapování na reprezentaci XML. Interpretuje DataContractSerializer některé reprezentace XML odlišně než XmlSerializer. Generátory proxy jiných než WCF, jako je například Wsdl.exe, generují při použití XmlSerializer více použitelné rozhraní. Použije se XmlSerializerFormatAttribute na ICalculator
rozhraní, aby se zajistilo, že XmlSerializer se používá pro mapování typů CLR na XML. Implementace služby vypočítá a vrátí odpovídající výsledek.
Služba zveřejňuje jeden koncový bod pro komunikaci se službou definovanou pomocí konfiguračního souboru (Web.config). Koncový bod se skládá z adresy, vazby a kontraktu. Služba zveřejňuje koncový bod na základní adrese poskytované hostitelem Internetová informační služba (IIS). Atribut binding
je nastaven na basicHttpBinding, který poskytuje komunikaci HTTP pomocí protokolu SOAP 1.1, který je kompatibilní s WS-I BasicProfile 1.1, jak je znázorněno v následující ukázkové konfiguraci.
<services>
<service name="Microsoft.ServiceModel.Samples.CalculatorService"
behaviorConfiguration="CalculatorServiceBehavior">
<!-- This endpoint is exposed at the base address provided by the host: http://localhost/servicemodelsamples/service.svc. -->
<endpoint address=""
binding="basicHttpBinding"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
</service>
</services>
Klient ASMX komunikuje se službou WCF pomocí zadaného proxy serveru, který je generován nástrojem WSDL (Web Services Description Language) (Wsdl.exe). Zadaný proxy server je obsažen v souboru generatedClient.cs. Nástroj WSDL načte metadata pro zadanou službu a vygeneruje typ proxy pro použití klientem ke komunikaci. Ve výchozím nastavení architektura nezpřístupňuje žádná metadata. Pokud chcete zpřístupnit metadata potřebná ke generování proxy serveru, musíte přidat <serviceMetadata> a nastavit jeho httpGetEnabled
atribut tak, jak True
je znázorněno v následující konfiguraci.
<behaviors>
<serviceBehaviors>
<behavior name="CalculatorServiceBehavior">
<!-- Setting httpGetEnabled to True on the serviceMetadata
behavior exposes the service's wsdl at <base address>?wsdl :
http://localhost/servicemodelsamples/service.svc?wsdl -->
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
Spuštěním následujícího příkazu z příkazového řádku v klientském adresáři vygenerujte zadaný proxy server.
wsdl /n:Microsoft.ServiceModel.Samples /o:generatedClient.cs /urlkey:CalculatorServiceAddress http://localhost/servicemodelsamples/service.svc?wsdl
Pomocí vygenerovaného zadaného proxy serveru má klient přístup k danému koncovému bodu služby tím, že nakonfiguruje příslušnou adresu. Klient používá konfigurační soubor (App.config) k určení koncového bodu, se kterým má komunikovat.
<appSettings>
<add key="CalculatorServiceAddress"
value="http://localhost/ServiceModelSamples/service.svc"/>
</appSettings>
Implementace klienta vytvoří instanci zadaného proxy serveru pro zahájení komunikace se službou.
// Create a client to the CalculatorService.
using (CalculatorService client = new CalculatorService())
{
// 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);
}
Console.WriteLine();
Console.WriteLine("Press <ENTER> to terminate client.");
Console.ReadLine();
Při spuštění ukázky se požadavky na operace a odpovědi zobrazí v okně konzoly klienta. Stisknutím klávesy ENTER v okně klienta klienta ukončete klienta.
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.
Nastavení, sestavení a spuštění ukázky
Ujistěte se, že jste pro ukázky windows Communication Foundation provedli jednorázovou instalační proceduru.
Pokud chcete sestavit edici C# nebo Visual Basic .NET řešení, postupujte podle pokynů v části Sestavení ukázek windows Communication Foundation.
Pokud chcete spustit ukázku v konfiguraci s jedním nebo více počítači, postupujte podle pokynů v části Spuštění ukázek windows Communication Foundation.
Poznámka:
Další informace o předávání a vracení složitých datových typů naleznete v tématu: Datové vazby v klientovi model Windows Forms, datové vazby v klientovi služby Windows Presentation Foundation a datové vazby v klientovi ASP.NET.