Szolgáltatásgazda
A szolgáltatásgazda egy folyamaton belüli szolgáltatás üzemeltetésére szolgáló futtatókörnyezet.
A szolgáltatás egy vagy több végpontot konfigurálhat egy szolgáltatás gazdagépen belül.
Szolgáltatás-gazdagép létrehozása
A szolgáltatásgazda létrehozása előtt a szolgáltatásnak meg kell határoznia a végpontjait. A szolgáltatás gazdagépének végpontja a WS_SERVICE_ENDPOINT struktúrában van megadva, és az alábbi információk határozzák meg:
- Egy cím, amely az a fizikai URI, amelyen a szolgáltatás üzemelni fog.
- Egy WS_CHANNEL_TYPE struktúra, amely meghatározza a végpont alapjául szolgáló csatorna típusát.
- A csatorna kötését meghatározó WS_CHANNEL_BINDING struktúra.
- A végpont biztonsági leírását tartalmazó WS_SECURITY_DESCRIPTION struktúra.
- A végponthoz tartozó szolgáltatási szerződésWS_SERVICE_CONTRACT struktúra.
- A végpont engedélyezési visszahívási függvényét meghatározó WS_SERVICE_SECURITY_CALLBACK struktúra.
- Szolgáltatásvégpont-tulajdonságok tömbét tartalmazó WS_SERVICE_ENDPOINT_PROPERTY struktúra.
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.
A SOAP csak egyirányú szerződéseket támogat az UDP-ből, amelyet WS_UDP_CHANNEL_BINDING képvisel a WS_CHANNEL_BINDING enumerálásban.
A végpont definiálása után továbbítható a WsCreateServiceHost függvénynek, amely a WS_SERVICE_ENDPOINT struktúrákhoz mutató tömböt vesz fel.
HRESULT hr = WsCreateServiceHost (serviceEndpoints, 1, NULL, 0, &host, error);
Az alkalmazások opcionálisan szolgáltatástulajdonságokatWsCreateServiceHost a szolgáltatásgazda egyéni beállításainak konfigurálásához.
Egy alkalmazás megnyitja a szolgáltatás gazdagépét az ügyfélkérések fogadásának megkezdéséhez.
WsOpenServiceHost(serviceHost, NULL, NULL);
A szolgáltatásgazda megnyitása után az alkalmazás bezárhatja, ha nincs több olyan művelet, amely megköveteli. Vegye figyelembe, hogy ez nem adja ki az erőforrásait, és a WsResetServiceHost egy későbbi hívásával újra megnyitható.
WsCloseServiceHost(serviceHost, NULL, NULL);
A szolgáltatás gazdagépének bezárása után egy alkalmazás visszaállíthatja a szolgáltatás gazdagépét újrahasználatra.
WsResetServiceHost(serviceHost, NULL);
Ha az alkalmazás elkészült a szolgáltatás gazdagépével, felszabadíthatja a szolgáltatás gazdagépéhez társított erőforrásokat a WsFreeServiceHost függvény meghívásával. Vegye figyelembe, hogy a függvény meghívása előtt WsCloseServiceHost kell meghívni.
WsFreeServiceHost(serviceHost, NULL);
Az egyéni állapot szolgáltatás gazdagéphez való csatolásáról további információt Felhasználói gazdagép állapota
Az adott végponthoz tartozó szolgáltatásgazda engedélyezésével kapcsolatos információkért lásd szolgáltatásengedélyezési.
A szolgáltatásműveletek és szolgáltatási szerződések szolgáltatásszerződések megvalósításával kapcsolatos információt a szolgáltatásműveletek és szolgáltatási szerződéstémakörökben talál.
Biztonság
Az alkalmazások a következő tulajdonságok használatával szabályozhatják a szolgáltatásgazda által az alkalmazás nevében lefoglalt erőforrások mennyiségét:
- 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.
Mindegyik tulajdonsághoz biztonságos alapértelmezett beállításokat választunk, az alkalmazásoknak körültekintőnek kell lenniük, ha módosítani szeretné ezeket a tulajdonságokat. A fent említett tulajdonságokon kívül csatorna, figyelő és üzenet is módosítható, adott tulajdonságokat az alkalmazás is módosíthatja. A beállítások módosítása előtt tekintse meg ezeknek az összetevőknek a biztonsági szempontjait.
Emellett a WWSAPI szolgáltatásgazda API használata során a következő alkalmazástervezési szempontokat kell alaposan értékelni:
- A MEX használatakor az alkalmazásoknak óvatosnak kell lenniük arra, hogy ne tegyenek közzé bizalmas adatokat. Ha a MEX-en keresztül közzétett adatok természete érzékeny, az alkalmazások dönthetnek úgy, hogy biztonságos kötéssel konfigurálják a MEX-végpontot, amely legalább hitelesítést igényel, és a végpont részeként implementálják az engedélyezést a WS_SERVICE_SECURITY_CALLBACKhasználatával.
- Alapértelmezés szerint az WS_SERVICE_PROPERTY_FAULT_DISCLOSURE tulajdonság letiltja a szolgáltatás gazdagépén a hibákon keresztüli részletes hibainformációkat. Az alkalmazás saját belátása szerint a hiba részeként részletes hibainformációkat küldhet. Ez azonban adatfeltárást eredményezhet, ezért javasoljuk, hogy ezt a beállítást csak hibakeresési forgatókönyvek esetén módosítsa.
- Az alapprofil 2.0-s és XML-szerializálásán túl a szolgáltatásgazda nem végez ellenőrzést a szolgáltatásműveleti paraméterek részeként kapott adattartalomon. Az alkalmazás feladata az összes paraméter-ellenőrzés önálló végrehajtása.
- Az engedélyezés nem a szolgáltatásgazda részeként van implementálva. Az alkalmazások azonban saját engedélyezési sémát implementálhatnak WS_SECURITY_DESCRIPTION és a WS_SERVICE_SECURITY_CALLBACKhasználatával.
- Az alkalmazás felelőssége, hogy biztonságos kötéseket használjon a végpontján. A szolgáltatás gazdagépe nem biztosít semmilyen biztonságot a végponton konfiguráltnál.
A szolgáltatásgazda az alábbi API-elemeket használja.
Visszahívási | Leírás |
---|---|
WS_SERVICE_ACCEPT_CHANNEL_CALLBACK | Akkor hívható meg, ha a szolgáltatásgazda elfogad egy csatornát egy végpontfigyelőn. |
WS_SERVICE_CLOSE_CHANNEL_CALLBACK | Akkor hívható meg, ha egy csatorna bezárul vagy megszakad egy végponton. |
Felsorolás | Leírás |
---|---|
WS_SERVICE_ENDPOINT_PROPERTY_ID | Nem kötelező paraméterek a WS_SERVICE_ENDPOINTkonfigurálásához. |
WS_SERVICE_HOST_STATE | Azok az állapotok, amelyekben egy szolgáltatás gazdagép lehet. |
WS_SERVICE_PROPERTY_ID | Nem kötelező paraméterek a szolgáltatás gazdagépének konfigurálásához. |
Funkció | Leírás |
---|---|
WsAbortServiceHost | Megszakítja és megszakítja az aktuális műveleteket a szolgáltatás gazdagépén. |
WsCloseServiceHost | Bezárja az összes figyelőt, hogy az ügyfél ne fogadjon el új csatornákat. |
WsCreateServiceHost | Létrehoz egy szolgáltatás-gazdagépet. |
WsFreeServiceHost | Felszabadítja a szolgáltatásgazda objektumhoz társított memóriát. |
WsGetServiceHostProperty | Lekéri a megadott Szolgáltatásgazda tulajdonságot. |
WsOpenServiceHost | Megnyitja a szolgáltatás-gazdagépet a kommunikációhoz, és elindítja a figyelőket az összes végponton. |
WsResetServiceHost | Alaphelyzetbe állítja a szolgáltatás gazdagépét az újbóli használathoz, és alaphelyzetbe állítja a mögöttes csatornát és a figyelőket az újrafelhasználáshoz. |
Fogantyú | Leírás |
---|---|
WS_SERVICE_HOST | Egy szolgáltatás gazdagépére való hivatkozáshoz használt átlátszatlan típus. |
Szerkezet | Leírás |
---|---|
WS_SERVICE_ENDPOINT | Egy szolgáltatás gazdagépen lévő egyedi végpontot jelöl. |
WS_SERVICE_ENDPOINT_PROPERTY | Szolgáltatásspecifikus beállítást ad meg. |
WS_SERVICE_PROPERTY | Szolgáltatásspecifikus beállítást ad meg. |
WS_SERVICE_PROPERTY_ACCEPT_CALLBACK | Megadja a visszahívást, amelyet a csatorna sikeres elfogadásakor hív meg. |
WS_SERVICE_PROPERTY_CLOSE_CALLBACK | Megadja a visszahívást, amelyet egy csatorna bezárásakor hív meg. |