Aracılığıyla paylaş


Hizmet Ara Sunucusu

Hizmet proxy'si, bir hizmetin istemci tarafı ara sunucusudur. Hizmet ara sunucusu, uygulamaların yöntem çağrıları olarak bir kanalı üzerinden iletileri gönderip almasını sağlar.

Hizmet proxy'leri gerektiğinde oluşturulur, açılır, bir hizmeti çağırmak için kullanılır ve artık gerekli olmadığında kapatılır. Alternatif olarak, bir uygulama, bir hizmet ara sunucusunu birden çok kez başlatmak için gereken zaman ve kaynak harcamaları olmadan aynı hizmete tekrar tekrar bağlanmak için bir hizmet ara sunucusunu yeniden kullanabilir. Aşağıdaki diyagramda hizmet ara sunucusunun olası durumlarının akışı ve bir durumdan diğerine giden işlev çağrıları veya olayları gösterilmektedir.

Hizmet ara sunucusu durumlarını ve bir durumdan diğerine yol açan işlev çağrılarını veya olaylarını gösteren diyagram.

Bu hizmet proxy durumları WS_SERVICE_PROXY_STATE numaralandırmasında numaralandırılır.

Yukarıdaki diyagramda ve aşağıdaki kodda gösterildiği gibi, WsCreateServiceProxy işlevine yapılan çağrı tarafından bir hizmet ara sunucusu oluşturulur. Bu çağrının parametreleri olarak WWSAPI aşağıdaki numaralandırmaları sağlar:

Ayrıca aşağıdaki veri türlerini kullanarak isteğe bağlı parametreleri kabul eder:

Hizmet ara sunucusu oluşturulduğunda, WsCreateServiceProxy işlevi bir out parametresi aracılığıyla hizmet ara sunucusuna WS_SERVICE_PROXYbir başvuru döndürür.

WS_SERVICE_PROXY* serviceProxy = NULL;
hr = WsCreateServiceProxy (
    WS_TCP_CHANNEL_BINDING, 
    WS_CHANNEL_TYPE_DUPLEX_SESSION, 
    NULL, 
    NULL, 
    0, 
    NULL,
    0,
    &serviceProxy, 
    error);

Hizmet proxy'si oluşturulduğunda, uygulama WsOpenServiceProxy işlevini çağırarak, bağlanacak hizmet uç noktasının ağ adresini içeren bir adresi yapısı geçirerek hizmetle iletişim için hizmet ara sunucusunu açabilir.

WS_ENDPOINT_ADDRESS address = {0};
address.uri.chars = "net.tcp://localhost/example";
address.uri.length = wcslen("net.tcp://localhost/example";);
hr = WsOpenServiceProxy(serviceProxy, &address, NULL, error);

Hizmet ara sunucusu açıldığında, uygulama hizmete çağrı yapmak için bunu kullanabilir.

hr = Add(
    serviceProxy, 
    1, 
    2, 
    &result, 
    NULL, 
    0, 
    NULL, 
    error);

Uygulama artık hizmet ara sunucusuna ihtiyaç duyduğunda, WsCloseServiceProxy işlevini çağırarak hizmet ara sunucusunu kapatır. Ayrıca WsFreeServiceProxyçağırarak ilişkili belleği serbest bırakır.

hr = WsCloseServiceProxy(
    serviceProxy, 
    NULL, 
    error);
hr = WsFreeServiceProxy(
    serviceProxy, 
    error);

Hizmet Ara Sunucusunu Yeniden Kullanma

Alternatif olarak, bir uygulama WsCloseServiceProxy çağrıldıktan sonra WsResetServiceProxy işlevini çağırarak hizmet ara sunucusunu yeniden kullanabilir.

hr = WsResetServiceProxy(
    serviceProxy, 
    error);

Hizmet proxy'lerinin farklı bağlamlarda nasıl kullanıldığı hakkında daha fazla bilgi için aşağıdaki konulara bakın:

Güvenlik

WWSAPI hizmeti proxy API'sini kullanırken aşağıdaki uygulama tasarımıyla ilgili dikkat edilmesi gereken noktalara dikkat edilmelidir:

  • Hizmet proxy'si, Temel Profil 2.0 doğrulaması ve XML serileştirmesi dışında hiçbir veri doğrulaması gerçekleştirmez. Çağrının bir parçası olarak geri aldığı parametrelerde yer alan verileri doğrulamak uygulamanın sorumluluğundadır.
  • WS_PROXY_PROPERTY_MAX_PENDING_CALLSWS_PROXY_PROPERTY_ID numaralandırma değerini kullanarak hizmet proxy'sinde bekleyen çağrı sayısı üst sınırının yapılandırılması, yavaş çalışan bir sunucuya karşı koruma sağlar. Varsayılan üst sınır 100'dür. Uygulamalar varsayılanları değiştirirken dikkatli olmalıdır.
  • Hizmet ara sunucusu, sunucuyla iletişim kurmak için kullanılan WS_SECURITY_DESCRIPTION yapısında belirtilenlerin ötesinde hiçbir güvenlik garantisi sağlamaz.
  • Hizmet proxy'sinde varsayılan ileti ve kanalı değiştirirken dikkatli olun. İlgili özelliklerden herhangi birini değiştirmeden önce iletilerle ve kanallarla ilişkili güvenlik konularını okuyun.
  • Hizmet ara sunucusu, bellekte tuttuğu tüm kimlik bilgilerini şifreler.

Aşağıdaki API öğeleri hizmet proxy'leriyle ilgilidir.

Geri çağırma Açıklama
WS_PROXY_MESSAGE_CALLBACK Giriş iletisinin üst bilgileri gönderilmek üzere olduğunda veya bir çıkış iletisi üst bilgileri yeni alındığında çağrılır.

 

Sayım Açıklama
WS_CALL_PROPERTY_ID İstemci tarafı hizmet işleminde bir çağrıyı yapılandırmak için isteğe bağlı parametreleri numaralandırır.
WS_PROXY_PROPERTY_ID Hizmet ara sunucusunu yapılandırmak için isteğe bağlı parametreleri numaralandırır.
WS_SERVICE_PROXY_STATE Hizmet proxy'sinin durumu.

 

Fonksiyon Açıklama
WsAbandonCall Belirtilen hizmet proxy'sinde belirtilen çağrıyı bırakır.
WsAbortServiceProxy Belirtilen hizmet proxy'sinde bekleyen tüm girişi ve çıkışı iptal eder.
WsCall Yalnızca dahili. Bağımsız değişkenleri bir iletide seri hale getirerek kanal üzerinden gönderir.
WsCloseServiceProxy İletişim için bir hizmet ara sunucusunu kapatır.
WsCreateServiceProxy Bir hizmet proxy'si oluşturur.
WsFreeServiceProxy Bir hizmet ara sunucusuyla ilişkili belleği serbest bırakır.
WsGetServiceProxyProperty Belirtilen bir hizmet ara sunucusu özelliğini alır.
WsOpenServiceProxy Hizmet uç noktasına bir hizmet ara sunucusu açar.
WsResetServiceProxy Hizmet ara sunucusunu sıfırlar.

 

Kulp Açıklama
WS_SERVICE_PROXY Hizmet ara sunucusuna başvurmak için kullanılan opak bir tür.

 

Yapı Açıklama
WS_CALL_PROPERTY Bir çağrı özelliği belirtir.
WS_PROXY_PROPERTY. Bir proxy özelliği belirtir.