Hibák
A rendszer egy hibaüzenetet használ a távoli végponton történt hibákkal kapcsolatos hibainformációk közlésére. A hibaüzenetek olyanok, mint bármely más üzenet, kivéve, hogy az üzenet törzsének formátuma szabványos formátumú. A hibákat az infrastruktúra protokolljai, például a WS-Addressing és a magasabb szintű alkalmazásprotokollok egyaránt használhatják.
- áttekintési
- Szolgáltatás hibáinak generálása
- Ügyfélhibák kezelése
- Üzenetek hibáinak használata
Áttekintés
A hibaüzenet törzsének tartalma ebben az API-ban jelenik meg a WS_FAULT struktúrával. Bár a hiba rögzített mezőkészlettel rendelkezik a hibával kapcsolatos információk megadásához (például a hiba típusát azonosító WS_FAULT_CODE és a hibát leíró szöveget tartalmazó WS_FAULT_REASON), egy részletmezőt is tartalmaz, amely a hibához kapcsolódó tetszőleges XML-tartalom megadására használható.
Hibák létrehozása egy szolgáltatásban
A szolgáltatás általában a kérés feldolgozása során észlelt hiba miatt küldi el a hibát. Az API által használt modell az, hogy a szolgáltatásban található kód, amely a feldolgozási hibát észleli, rögzíti a szükséges hibainformációkat az WS_ERROR objektumban, majd a híváslánc magasabb szintjén lévő kód ténylegesen elküldi a hibát az alsó rétegben rögzített információk alapján. Ez a séma lehetővé teszi, hogy a hibát küldő kód el legyen szigetelve a hibahelyzetek hibákhoz való hozzárendelésétől, miközben továbbra is lehetővé teszi a részletes hibainformációk küldését.
A következő tulajdonságok használhatók WsSetFaultErrorProperty egy WS_ERROR objektum hibaadatainak rögzítéséhez:
- WS_FAULT_ERROR_PROPERTY_ACTION. Ez határozza meg a hibaüzenethez használni kívánt műveletet. Ha ez nincs megadva, a rendszer egy alapértelmezett műveletet ad meg.
- WS_FAULT_ERROR_PROPERTY_FAULT. Ez tartalmazza a hibaüzenet törzsében küldött WS_FAULT struktúrát.
- WS_FAULT_ERROR_PROPERTY_HEADER. Egyes hibák közé tartoznak az üzenetfejlécek, amelyeket a rendszer hozzáad a hibaüzenethez, hogy a kérésüzenet fejléceihez kapcsolódó feldolgozási hibákat közvetítsen. Ez a tulajdonság egy olyan WS_XML_BUFFER megadására használható, amely a hibaüzenethez hozzáadandó fejlécet tartalmazza.
Az WS_ERROR objektumhoz hozzáadott hibasztringeket a rendszer az elküldött hiba szövegeként használja. A hibasztringek WsAddErrorStringhasználatával adhatók hozzá a hibaobjektumhoz.
A WsSetFaultErrorProperty függvény a WS_ERROR objektum ezen tulajdonságainak beállítására használható.
A WS_ERROR objektumban tárolt hiba részleteinek beállításához használja a WsSetFaultErrorDetail függvényt. Ezzel a függvénnyel tetszőleges XML-tartalmat társíthat a hibához.
A szolgáltatásgazda automatikusan hibákat küld a WS_ERROR objektum fenti információinak használatával. A WS_SERVICE_PROPERTY_FAULT_DISCLOSURE tulajdonság segítségével szabályozható, hogy a rendszer milyen részletes hibákat küld el.
Ha a csatornarétegen dolgozik, a WsSendFaultMessageForErrorhasználatával hibák küldhetők egy WS_ERROR objektumhoz.
Az ügyfél hibáinak kezelése
Ha egy ügyfél szolgáltatásproxy- vagy WsRequestReply vagy WsReceiveMessagehasználatával kap hibát, a WS_E_ENDPOINT_FAULT_RECEIVED hiba jelenik meg. (További információ: Windows Web Services visszatérési értékek.) Ezek a függvények a híváshoz megadott WS_ERROR objektumot is feltöltik a kapott hibára vonatkozó információkkal.
Egy WS_ERROR objektum alábbi tulajdonságai lekérdezhetők WsGetFaultErrorProperty használatával a kapott hibával kapcsolatos információk lekéréséhez:
- WS_FAULT_ERROR_PROPERTY_ACTION. Ez a hibaüzenet műveleti értékét adja meg.
- WS_FAULT_ERROR_PROPERTY_FAULT. Ez tartalmazza a hibaüzenet törzséből deszerializált WS_FAULT struktúrát.
A hibák tetszőleges további XML-tartalmat tartalmazhatnak a hiba részleteiben. Ez a WsGetFaultErrorDetail függvénnyel érhető el.
Hibák használata üzenetekkel
A következő szakasz a hibaüzenet törzsének tartalmával való közvetlen kezelésre vonatkozik.
A hibaüzenet törzsének tartalmát a szabványos WS_FAULT szerkezet képviseli, amely beépített támogatást nyújt a szerializáláshoz.
Például a következő kód használható egy üzenettörzs hibaének megírására:
HRESULT hr;
WS_ELEMENT_DESCRIPTION faultDescription = { NULL, WS_FAULT_TYPE, NULL, NULL };
WS_FAULT fault = { ... };
hr = WsWriteBody(message, &faultDescription, WS_WRITE_REQUIRED_VALUE, &fault, sizeof(fault), error);
A következő kód használható egy üzenettörzs hibájának beolvasására:
HRESULT hr;
WS_ELEMENT_DESCRIPTION faultDescription = { NULL, WS_FAULT_TYPE, NULL, NULL };
WS_FAULT fault;
hr = WsReadBody(message, &faultDescription, WS_READ_REQUIRED_VALUE, &fault, sizeof(fault), error);
Annak megállapításához, hogy egy fogadott üzenet hiba-e vagy sem, a WS_MESSAGE_PROPERTY_IS_FAULT megtekinthető. Ez a tulajdonság attól függ, hogy a törzs első eleme hibaelem-e WsReadMessageStart vagy WsReadEnvelopeStartsorán.
Ha WS_ERRORadott WS_FAULT szeretne létrehozni, használja a WsCreateFaultFromError függvényt.
A következő enumerálások a hibák részét képezik:
A következő függvények a hibák részei:
- WsCreateFaultFromError
- WsGetFaultErrorDetail
- WsGetFaultErrorProperty
- WsSetFaultErrorDetail
- WsSetFaultErrorProperty
A következő struktúrák a hibák részei: