Hizmet Ana Bilgisayarı
Hizmet konağı, bir işlem içinde bir hizmeti barındırmak için çalışma zamanı ortamıdır.
Bir hizmet, bir hizmet konağı içinde bir veya daha fazla uç nokta yapılandırabilir.
hizmet uç noktası içeren bir hizmet konağı yapısını gösteren
Hizmet konağı oluşturma
Hizmet konağı oluşturmadan önce hizmetin uç noktalarını tanımlaması gerekir. Hizmet konağındaki bir uç nokta WS_SERVICE_ENDPOINT yapısında belirtilir ve aşağıdaki bilgilerle tanımlanır:
- Hizmetin barındırılacağı fiziksel URI olan adres.
- Uç nokta için temel alınan kanalın türünü belirten WS_CHANNEL_TYPE yapısı.
- Kanalın bağlamasını belirten bir WS_CHANNEL_BINDING yapısı.
- Uç noktanın güvenlik açıklamasını içeren WS_SECURITY_DESCRIPTION yapısı.
- Uç nokta için hizmet sözleşmesi temsil eden WS_SERVICE_CONTRACT yapısı.
- Uç nokta için yetkilendirme geri çağırma işlevini belirten bir WS_SERVICE_SECURITY_CALLBACK yapısı.
- Hizmet uç noktası özellikleri dizisi içeren bir WS_SERVICE_ENDPOINT_PROPERTY yapısı.
WS_SERVICE_ENDPOINT serviceEndpoint = {0};
const WS_SERVICE_ENDPOINT* serviceEndpoints[1];
serviceEndpoints[0] = &serviceEndpoint;
WS_STRING url = WS_STRING_VALUE(L"net.tcp://+/Example");
// Method based service contract for the service
static WS_SERVICE_CONTRACT calculatorContract =
{
&calculatorContractDescription, // comes from a generated header.
NULL,
&calculatorFunctions, // specified by the application
};
serviceEndpoint.address.url = &url;
serviceEndpoint.binding.channelBinding = WS_TCP_CHANNEL_BINDING;
serviceEndpoint.contract = &calculatorContract;
serviceEndpoint.channelType = WS_CHANNEL_TYPE_DUPLEX_SESSION;
serviceEndpoint.authorizationCallback = AuthorizationCallback; // Authorization callback.
WS_CHANNEL_BINDING numaralandırmasında WS_UDP_CHANNEL_BINDING tarafından temsil edilen UDP üzerinden SOAP için yalnızca tek yönlü sözleşmeler desteklenir.
Bir uç nokta tanımlandıktan sonra, WS_SERVICE_ENDPOINT yapılara işaretçi dizisi alan WsCreateServiceHost işlevine geçirilebilir.
HRESULT hr = WsCreateServiceHost (serviceEndpoints, 1, NULL, 0, &host, error);
Bir uygulama isteğe bağlı olarak, hizmet ana bilgisayarında özel ayarları yapılandırmak için WsCreateServiceHosthizmet özellikleri dizisi sağlayabilir.
Uygulama, istemci isteklerini kabul etmeye başlamak için hizmet ana bilgisayarını açar.
WsOpenServiceHost(serviceHost, NULL, NULL);
Hizmet ana bilgisayarını açtıktan sonra, bunu gerektiren başka işlem yoksa uygulama bu konağı kapatabilir. Bunun kaynaklarını serbest bırakmadığını ve sonraki WsResetServiceHostçağrısıyla yeniden açılabildiğini unutmayın.
WsCloseServiceHost(serviceHost, NULL, NULL);
Hizmet konağı kapatıldıktan sonra, bir uygulama hizmet ana bilgisayarını yeniden kullanmak üzere sıfırlayabilir.
WsResetServiceHost(serviceHost, NULL);
Uygulama hizmet konağıyla tamamlandığında, WsFreeServiceHost işlevini çağırarak hizmet konağıyla ilişkili kaynakları serbest kılabilir. Bu işlevi çağırmadan önce WsCloseServiceHost çağrılması gerektiğini unutmayın.
WsFreeServiceHost(serviceHost, NULL);
Hizmet konağına özel durum ekleme hakkında bilgi için bkz. kullanıcı ana bilgisayar durumu
Belirli bir uç nokta için hizmet ana bilgisayarında yetkilendirme hakkında bilgi için bkz. Hizmet Yetkilendirmesi.
Bir hizmet için hizmet işlemlerini ve hizmet sözleşmelerini uygulama hakkında bilgi edinmek için hizmet işlemleri ve hizmet sözleşmesikonularına bakın.
Güvenlik
Bir uygulama, hizmet konağı tarafından uygulama adına ayrılan kaynak miktarını denetlemek için aşağıdaki özellikleri kullanabilir:
- WS_SERVICE_ENDPOINT_PROPERTY_MAX_ACCEPTING_CHANNELS,
- WS_SERVICE_ENDPOINT_PROPERTY_MAX_CONCURRENCY,
- WS_SERVICE_ENDPOINT_PROPERTY_MAX_CHANNELS,
- WS_SERVICE_ENDPOINT_PROPERTY_BODY_HEAP_MAX_SIZE,
- WS_SERVICE_ENDPOINT_PROPERTY_MAX_CALL_POOL_SIZE,
- WS_SERVICE_ENDPOINT_PROPERTY_MAX_CHANNEL_POOL_SIZE.
Bu özelliklerin her biri için güvenli varsayılanlar seçilir, bu özellikleri değiştirmek isteyen bir uygulama dikkatli olmalıdır. Yukarıda belirtilen özelliklerin ötesinde, kanalıdinleyici ve ileti belirli özellikler de uygulama tarafından değiştirilebilir. Bu ayarlardan herhangi birini değiştirmeden önce bu bileşenlerin güvenlikle ilgili dikkat edilmesi gereken noktalarına bakın.
Ayrıca, WWSAPI hizmeti konak API'si kullanılırken aşağıdaki uygulama tasarımı konuları dikkatle değerlendirilmelidir:
- MEX kullanırken, uygulamalar hassas verileri açıklamamaya dikkat etmelidir. Bir azaltma olarak, MEX aracılığıyla kullanıma sunulan verilerin doğası hassassa, uygulamalar EN az kimlik doğrulaması gerektiren güvenli bağlama ile MEX uç noktasını yapılandırmayı ve WS_SERVICE_SECURITY_CALLBACKkullanarak uç noktanın bir parçası olarak yetkilendirme uygulamayı seçebilir.
- Varsayılan olarak, hatalarla ilgili zengin hata bilgileri hizmet ana bilgisayarında WS_SERVICE_PROPERTY_FAULT_DISCLOSURE özelliği tarafından devre dışı bırakılır. Hatanın bir parçası olarak zengin hata bilgileri göndermek uygulamanın takdirine bağlıdır. Ancak bu durum bilgilerin açığa çıkmasına neden olabilir ve bu nedenle bu ayarın yalnızca hata ayıklama senaryoları için değiştirilmesi önerilir.
- Temel Profil 2.0 ve XML serileştirmesi için gerçekleştirilen doğrulamanın ötesinde, hizmet ana bilgisayarı hizmet işlemi parametrelerinin bir parçası olarak alınan veri içeriğinde doğrulama gerçekleştirmez. Tüm parametre doğrulamalarını kendi başına gerçekleştirmek uygulamanın sorumluluğundadır.
- Yetkilendirme, hizmet ana bilgisayarının bir parçası olarak uygulanmaz. Ancak, uygulamalar WS_SECURITY_DESCRIPTION ve WS_SERVICE_SECURITY_CALLBACKkullanarak kendi yetkilendirme düzenlerini uygulayabilir.
- Uç noktasında güvenli bağlamalar kullanmak uygulamanın sorumluluğundadır. Hizmet konağı, uç noktada yapılandırılanların ötesinde bir güvenlik sağlamaz.
Hizmet konağı ile aşağıdaki API öğeleri kullanılır.
Geri çağırma | Açıklama |
---|---|
WS_SERVICE_ACCEPT_CHANNEL_CALLBACK | Hizmet konağı tarafından bir uç nokta dinleyicisinde bir kanal kabul edildiğinde çağrılır. |
WS_SERVICE_CLOSE_CHANNEL_CALLBACK | Bir kanal bir uç noktada kapatıldığında veya durdurulduğunda çağrılır. |
Sayım | Açıklama |
---|---|
WS_SERVICE_ENDPOINT_PROPERTY_ID | WS_SERVICE_ENDPOINTyapılandırmak için isteğe bağlı parametreler. |
WS_SERVICE_HOST_STATE | Bir hizmet konasının içinde bulunabileceği durumlar. |
WS_SERVICE_PROPERTY_ID | Hizmet ana bilgisayarını yapılandırmak için isteğe bağlı parametreler. |
Kulp | Açıklama |
---|---|
WS_SERVICE_HOST | Hizmet konağına başvurmak için kullanılan opak bir tür. |
Yapı | Açıklama |
---|---|
WS_SERVICE_ENDPOINT | Hizmet konağındaki tek bir uç noktayı temsil eder. |
WS_SERVICE_ENDPOINT_PROPERTY | Hizmete özgü bir ayar belirtir. |
WS_SERVICE_PROPERTY | Hizmete özgü bir ayar belirtir. |
WS_SERVICE_PROPERTY_ACCEPT_CALLBACK | Bir kanal başarıyla kabul edildiğinde çağrılan geri çağırmayı belirtir. |
WS_SERVICE_PROPERTY_CLOSE_CALLBACK | Bir kanal kapatılacakken çağrılan geri çağırmayı belirtir. |