Aracılığıyla paylaş


Hata

Hata iletisi, uzak uç noktadaki hatayla ilgili hata bilgilerini iletmek için kullanılır. Hata iletisi, ileti gövdesinin biçiminin standart bir biçime sahip olması dışında diğer tüm iletilere benzer. Hatalar hem WS-Addressing gibi altyapı protokolleri hem de üst düzey uygulama protokolleri tarafından kullanılabilir.

Genel bakış

Hata iletisinin gövdesinin içeriği, WS_FAULT yapısı kullanılarak bu API'de temsil edilir. Bir hatanın hata hakkında bilgi sağlamak için kullanılan sabit bir alan kümesi olsa da (hata türünü tanımlayan WS_FAULT_CODE ve hatayı açıklayan metin içeren WS_FAULT_REASON gibi), hatayla ilgili rastgele XML içeriğini belirtmek için kullanılabilecek bir ayrıntı alanı da içerir.

Hizmette hata oluşturma

Bir hizmet genellikle istek işlenirken karşılaşılan bir hata nedeniyle hata gönderir. Bu API tarafından kullanılan model, hizmetteki işleme hatasıyla karşılaşan kodun WS_ERROR nesnesinde gerekli hata bilgilerini yakalaması ve ardından çağrı zincirindeki daha yüksek bir düzeydeki kodun alt katmanda yakalanan bilgileri kullanarak hatayı göndermesidir. Bu düzen, hata gönderen kodun hata durumlarının hatalara eşlenme şekline karşı yalıtılmasını sağlarken, zengin hata bilgilerinin gönderilmesine de olanak tanır.

Aşağıdaki özellikler, WS_ERROR nesnenin hata bilgilerini yakalamak için WsSetFaultErrorProperty kullanılabilir:

WS_ERROR nesnesine eklenen tüm hata dizeleri, gönderilen hatada metin olarak kullanılır. Hata dizeleri, WsAddErrorStringkullanılarak hata nesnesine eklenebilir.

WsSetFaultErrorProperty işlevi, WS_ERROR nesnesinin bu özelliklerini ayarlamak için kullanılabilir.

WS_ERROR nesnesinde depolanan hatanın ayrıntılarını ayarlamak için WsSetFaultErrorDetail işlevini kullanın. Bu işlev, rastgele XML içeriğini hatayla ilişkilendirmek için kullanılabilir.

Hizmet Ana Bilgisayarı, WS_ERROR nesnesinde yukarıdaki bilgileri kullanarak hataları otomatik olarak gönderir. WS_SERVICE_PROPERTY_FAULT_DISCLOSURE özelliği, bir hatanın ne kadar ayrıntılı gönderileceğini denetlemek için kullanılabilir.

Kanal katmanında çalışıyorsanız, WsSendFaultMessageForErrorkullanılarak bir WS_ERROR nesnesi için hatalar gönderilebilir.

İstemcideki hataları işleme

bir istemci Hizmet Ara Sunucusu kullanırken veya WsRequestReply veya WsReceiveMessagekullanırken hata alırsa, WS_E_ENDPOINT_FAULT_RECEIVED hatası döndürülür. (Daha fazla bilgi için bkz. Windows Web Services Dönüş Değerleri.) Bu işlevler, çağrıya sağlanan WS_ERROR nesnesini alınan hatayla ilgili bilgilerle de doldurur.

Bir WS_ERROR nesnesinin aşağıdaki özellikleri, alınan bir hata hakkında bilgi almak için WsGetFaultErrorProperty kullanılarak sorgulanabilir:

Hata, hatanın ayrıntılarında rastgele ek XML içeriği içerebilir. Buna, WsGetFaultErrorDetail işlevi kullanılarak erişilebilir.

İletilerle ilgili hataları kullanma

Aşağıdaki bölüm, bir hata iletisinin gövdesinin içeriğiyle doğrudan ilgilenirken geçerlidir.

Bir hata iletisinin gövdesinin içeriği, serileştirme için yerleşik desteği olan standart WS_FAULT yapısıyla temsil edilir.

Örneğin, bir ileti gövdesine hata yazmak için aşağıdaki kod kullanılabilir:

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);

İleti gövdesinden bir hatayı okumak için aşağıdaki kod kullanılabilir:

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);

Alınan iletinin bir hata olup olmadığını bilmek için WS_MESSAGE_PROPERTY_IS_FAULT danışılabilir. Bu özellik, WsReadMessageStart veya WsReadEnvelopeStartsırasında gövdedeki ilk öğenin bir hata öğesi olup olmadığına göre ayarlanır.

WS_ERRORverilen bir WS_FAULT oluşturmak için WsCreateFaultFromError işlevini kullanın.

Aşağıdaki numaralandırmalar hataların bir parçasıdır:

Aşağıdaki işlevler hataların bir parçasıdır:

  • WsCreateFaultFromError
  • WsGetFaultErrorDetail
  • WsGetFaultErrorProperty
  • WsSetFaultErrorDetail
  • WsSetFaultErrorProperty

Aşağıdaki yapılar hataların bir parçasıdır: