WCF

2013-06-03 77 views
1

無法獲得友好的自定義錯誤反饋給我的客戶端我扔了一個新的FaultException("error");,它回到我的客戶與文本'錯誤'。WCF

現在我正在更進一步,我想用FaultContract正確地做到這一點。

因此,我創建了一個名爲ServiceFault的[DataContract]屬性,它只具有string ErrorMessage屬性。

我的代碼是這樣的:

ServiceFault serviceFault = new ServiceFault("Broken.");

throw new FaultException<ServiceFault>(serviceFault);

我做了一個控制檯應用程序進行測試,完成與嘗試捕捉捕捉故障異常,但我只是得到:

無法調用該服務。可能的原因:該服務離線 或無法訪問;客戶端配置與 代理不匹配;現有的代理無效。有關更多詳細信息,請參閱 的堆棧跟蹤。您可以嘗試通過啓動新代理,將 恢復爲默認配置或刷新服務來進行恢復。

我想它應該說是一個錯誤異常發生,但它沒有,我只是明白了。

我能否錯過某些明顯的東西?也許配置選項?我已經實現它使用這個例子:http://msdn.microsoft.com/en-us/library/ms752208.aspx

我應該補充說,我已經把[FaultContract(typeof(ServiceFault))]到ServiceContract。

還有一些注意事項:如果我只是拋出一個普通的FaultException,客戶端正確處理它。

當我拋出自定義故障異常時,即使我連續更新兩次,客戶端更新服務/檢索MEX數據(可疑)也需要很長時間。

+0

您的客戶是否有新服務合同的副本? – zimdanen

+0

是的,我每次下載包括所有數據合同和服務合同在內的完整元數據(理論上)時,都會更新服務參考。如果我使用對象瀏覽器探索客戶端上的服務,我可以看到我的ServiceFault類 – NibblyPig

回答

2

我已經解決了這個問題,我不想讓別人產生同樣的頭痛問題。

這是由ServiceFault(我的自定義故障類)不正確序列化引起的。

原始類有兩個屬性,一個是string和一個int,定義了一個getter和一個私有setter。

某些部分是大量混淆它,所以我將它們設置爲簡單的字段並重建/更新服務參考。它立即工作沒有問題。

所以要小心DataContracts以確保它們可以正確序列化。

+0

我認爲私人設置者可能已經完成了它。爲了對類進行序列化和反序列化,所有屬性都需要公開設置並獲取。 –