0
我有2個WCF服務和一個調用第一個WCF服務的方法的客戶端,該方法因此調用第二個WCF服務的方法。第二個WCF服務的方法引發了一個通用的錯誤異常,我需要這個異常通常會通過第一個服務「交付」給我的客戶。第一個WCF服務通常會在異常消息主體中獲取該通用異常,其中Action
「http:// SomeNamespace」。當第一個服務重新拋出這個異常給客戶端時,客戶端變得簡單FaultException
而不是動作`包含一個客戶端不能接受的名字空間,這就是爲什麼客戶端無法獲得一般的異常。在第一個WCF服務中有一個WCF異常屏蔽。以下是配置代碼和處理程序代碼。 請幫助我,並建議改變異常行爲的最佳方式,即客戶端能夠正常獲取它。修改例外
下面是配置:
<exceptionHandling>
<exceptionPolicies>
<add name="WCF Exception Shielding">
<exceptionTypes>
<add type="System.ServiceModel.FaultException`1[[Sample.SomeFaultContract, Sample, PublicKeyToken=769e6b46280078d4]], System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
postHandlingAction="ThrowNewException" name="SomeFaultContract">
<exceptionHandlers>
<add faultContractType="Sample.SomeFaultContract, Sample, PublicKeyToken=769e6b46280078d4"
type="Helper.ServiceFaultContractHandler, Logger, PublicKeyToken=769e6b46280078d4"
name="Fault Contract Exception Handler" />
</exceptionHandlers>
</add>
</exceptionTypes>
</add>
</exceptionHandling>
而且處理的部分是:
public class ServiceFaultContractHandler : IExceptionHandler
{
public ServiceFaultContractHandler(NameValueCollection ignore) { }
public Exception HandleException(Exception exception, Guid correlationID)
{
}
}
預先感謝您。
亞蘭
謝謝你的回答,但是這是在配置已設置。客戶端的合同有他自己的名字空間,並且它得到具有不同名字空間的異常,並且不能識別該異常。出於測試目的,我已經用excpetion的Action中的名稱空間更改了客戶端的名稱空間,並且工作順利。但不幸的是,我無法更改任何名稱空間,只能以某種方式處理第一個WCF服務中的異常,並使用正確的名稱空間將其發送給客戶端。 – Aram 2010-11-30 08:33:50