Megosztás a következőn keresztül:


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é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:

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:

A következő struktúrák a hibák részei: