Hizmet Modeli Katmanına Genel Bakış
WWSAPI Hizmet Modeli API'si, istemci ile hizmet arasındaki iletişimi veri iletileri yerine yöntem çağrıları olarak modeller. İstemci ile hizmet arasında daha geleneksel ileti değişimini destekleyen kanal katmanıaksine, Hizmet Modeli istemcideki bir hizmet ara sunucusu ve hizmet üzerindeki bir hizmet konağı yoluyla iletişimi otomatik olarak yönetir. Bu, istemcinin oluşturulan işlevleri çağırdığını ve sunucunun geri çağırmalar uyguladığı anlamına gelir.
Örneğin, iki sayı üzerinde toplama ve çıkarma gerçekleştiren bir hesap makinesi hizmetini düşünün. Toplama ve çıkarma, doğal olarak yöntem çağrıları olarak temsil edilen işlemlerdir.
Hizmet modeli, bildirilen yöntem çağrıları olarak istemci ile hizmet arasındaki iletişimi temsil eder ve bu nedenle temel kanal katmanının iletişim ayrıntılarını uygulamadan gizleyerek hizmetin uygulanmasını kolaylaştırır.
Hizmet Belirtme
Bir hizmet hem ileti değişimi desenleri hem de ağ veri gösterimi açısından belirtilmelidir. Hizmetler için bu belirtim genellikle WSDL ve XML şema belgeleri olarak sağlanır.
WSDL belgesi, kanal bağlamasını ve hizmetin ileti değişimi desenlerini içeren bir XML belgesidir; XML şema belgesi ise tek tek iletilerin veri gösterimini tanımlayan bir XML belgesidir.
Hesap makinesi hizmeti ve toplama ve çıkarma işlemleri için WSDL belgesi aşağıdaki örnekteki gibi görünebilir:
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://Example.org"
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsa10="http://www.w3.org/2005/08/addressing"
xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex" targetNamespace="http://Example.org"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:portType name="ICalculator">
<wsdl:operation name="Add">
<wsdl:input wsaw:Action="http://Example.org/ICalculator/Add"
message="tns:ICalculator_Add_InputMessage" />
<wsdl:output wsaw:Action="http://Example.org/ICalculator/AddResponse"
message="tns:ICalculator_Add_OutputMessage" />
</wsdl:operation>
</wsdl:portType>
</wsdl:definitions>
Benzer şekilde, XML şeması aşağıdaki gibi tanımlanabilir:
<xs:schema xmlns:tns="http://Example.org" elementFormDefault="qualified"
targetNamespace="http://Example.org" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Add">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="a" type="xs:int" />
<xs:element minOccurs="0" name="b" type="xs:int" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="AddResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="result" type="xs:int"
/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Meta Verileri Koda Dönüştürme
Hizmet modeli, bu meta veri belgelerini işlemek için bir araç olarak WsUtil.exe sağlar ve bir WSDL dosyasını C üst bilgisi ve kaynak dosyalarına dönüştürür.
WsUtil.exe'nin bir WSDL dosyasını C üst bilgisine ve kaynak dosyalarına nasıl dönüştürdüğünü gösteren
WsUtil.exe, hizmet uygulaması için başlık ve kaynakların yanı sıra istemci için istemci tarafı hizmet işlemleri oluşturur.
İstemci Tarafından Hesap Makinesi Hizmetinin Çağrılması
Hizmet uygulamasında olduğu gibi, istemci oluşturulan üst bilgi veya başlıkları da eklemelidir.
#include "CalculatorProxyStub.h"
Artık istemci uygulaması hesap makinesi hizmetiyle iletişime başlamak için bir hizmet ara sunucusu oluşturup açabilir.
WS_ENDPOINT_ADDRESS address = {0};
WS_STRING uri= WS_STRING_VALUE(L"http://localhost/example");
address.uri = uri;
if (FAILED (hr = WsCreateServiceProxy(WS_CHANNEL_TYPE_REQUEST, WS_HTTP_CHANNEL_BINDING, NULL, NULL, 0, &serviceProxy, error)))
goto Error;
if (FAILED (hr = WsOpenServiceProxy(serviceProxy, &address, NULL, error)))
goto Error;
Uygulama hesap makinesi hizmetinde Ekle işlemini aşağıdaki kodla çağırabilir:
if (FAILED (hr = DefaultBinding_ICalculator_Add(serviceProxy, heap, 1, 2, &result, NULL, 0, NULL, error)))
goto Error;
Hesap makinesi hizmetinin tam uygulaması için lütfen httpcalculatorclientexample kod örneğine bakın.
Hizmet Modeli Bileşenleri
Hesap Makinesi örneği içindeki tek tek WWSAPI Hizmet Modeli bileşenlerinin etkileşimi aşağıdaki gibidir:
- İstemci bir hizmet proxy'si oluşturur ve açar.
- İstemci, hizmetin Add işlevini çağırır ve hizmet proxy'sini ileterek devam eder.
- İleti, meta veri aracı (WsUtil.exe) tarafından oluşturulan üst bilgi ve kaynak dosyalarındaki serileştirme meta verilerine göre serileştirilir.
- İleti kanala yazılır ve ağ üzerinden hizmete iletilir.
- Sunucu tarafında, hizmet bir hizmet konağı içinde barındırılır ve ICalculator sözleşmesini dinleyen bir uç noktası vardır.
- Hizmet Modeli meta verilerini saplamada kullanarak, hizmet istemciden gelen iletiyi seri durumdan kaldırır ve kalıba iletir.
- Sunucu tarafı hizmet, Add metodunu çağırarak işlem bağlamını geçirir. Bu işlem bağlamı, gelen iletiye başvuruyu içerir.
tek tek WWSAPI Hizmet Modeli bileşenlerinin etkileşimini gösteren
Bileşen
- Hizmet barındırıcı: Bir hizmeti barındırır.
- Hizmet proxy'si: İstemcinin bir hizmetle nasıl iletişim kurasını tanımlar.
- Bağlam: Duruma özgü bilgileri bir hizmet işlemi için kullanılabilir hale getirmek için özellik paketi.
- Sözleşme: Hizmetin arabirim tanımı. Örneğin, ICalculator örnek kodumuzda hesap makinesi hizmeti için bir sözleşmeyi temsil eder.
- WsUtil.exe: Proxy'ler ve stub'lar oluşturmak için Hizmet Modeli'ne yönelik meta veri aracı.