2016-04-22 128 views
1

我有一個WCF客戶端用於SAP系統中的一組服務。對於某些錯誤,這些服務(據稱)無法返回SOAP錯誤。相反,我收到類似這樣的內容:如何處理非SOAP錯誤消息?

<?xml version="1.0"?> 
<jpr:Fault xmlns:jpr="http://com.sap/aii/proxy/xiruntime/">com.sap.aii.proxy.xiruntime.core.ESPXISystemFaultException: Error encountered during processing of XI request message in inbound ESP; Hint: com.sap.engine.interfaces.webservices.runtime.RuntimeProcessException: Response did not arrive for request 8d4b2782-062a-11e6-b0f9-0000193763e3</jpr:Fault> 

以上表示服務中的某種類型的超時。我在這裏可以找到的唯一信息就是這段文字:Response did not arrive for request

有WSDL,但供應商並不認真對待它們。我還要求嘗試給我一個SOAP錯誤,但他們堅持認爲在這種情況下是不可能的。

我該如何處理這樣的信息?目前,我收到此異常鏈:

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. 
---> System.ServiceModel.CommunicationException: Unrecognized message version. 
+1

操作它,怎麼樣?將服務調用放在try-catch塊中並處理異常似乎是最簡單的方法。 – Tim

+0

@Tim捕捉TargetInvocationException過於寬泛,我必須確保我只捕獲這個特定的消息。 – Stijn

回答

0

這是可能的,但您將不得不使用一些低級別的位。您想要的位置在客戶端通道中,您可以在通道中安裝組件以處理這種響應。看看WCF Extensibility – Channels,你可以找到如何創建你的協議頻道。

之後,你可以創建自定義綁定疊加起來,你有交通運輸(必須存在)的通道,你的協議的,編碼器等..

+0

這與處理錯誤有什麼關係? – Tim

+0

處理錯誤的方法有很多。如果您想將某些內容作爲有意義的消息返回給客戶端,而不是無法識別的版本。 –

+0

當然,但在這種情況下,似乎一個簡單的嘗試抓住會做的伎倆,而不是寫一個自定義綁定的麻煩。 – Tim