2012-01-17 108 views
0

我使用WCF作爲ASP.Net MVC 2應用程序。 而當服務發生故障時,我需要繼續重新啓動服務器和客戶端。 通道故障是錯誤。WCF Faulting強制我重新啓動服務器和客戶端

這是爲什麼發生?爲什麼我會遇到這個錯誤,並且您建議我避免重新啓動的習慣,因爲這很耗時。

編輯1: 我使用塊來承載服務。 我將提供一個帶有示例代碼的小程序,以便儘快重現此問題。

編輯2: 我使用託管WCF服務庫

[ServiceContract] 
public interface IAuctionService 
{ 
    [OperationContract] 
    [FaultContract(typeof(DatabaseFault))] 
    void SaveCategory(CategoryDTO category); 

    [OperationContract] 
    [FaultContract(typeof(DatabaseFault))] 
    List<CategoryDTO> ListCategories(); 

    [OperationContract] 
    [FaultContract(typeof(DatabaseFault))] 
    CategoryDTO GetCategoryById(long id); 
} 

並在客戶端我添加了一個服務引用到此服務的自我。

我是否應該處理所有類型的異常並將它們使用錯誤丟給客戶端?

+1

您需要提供更多詳細信息。究竟發生了什麼?你對服務器和客戶端有什麼樣的錯誤處理?你使用FaultExceptions嗎?等 – diggingforfire 2012-01-17 13:26:00

+0

是的,我用故障例外與處理 – 2012-01-18 11:55:37

回答

2

您不應該將ServiceHost包裝在使用區塊中!

看到這裏的細節: http://www.danrigsby.com/blog/index.php/2008/02/26/dont-wrap-wcf-service-hosts-or-clients-in-a-using-statement/

UPDATE

關於發送故障到您的來電:是一般來說,你應該在服務返回異常作爲SOAP錯誤給調用者。這是SOAP故障的設計目的。

但是,您應該爲每個要返回調用者的故障類型定義故障合同。

作爲指導方針,您應該只發送調用者可以有效處理的故障,並從(通過重試或其他操作)恢復。

如果您的調用程序的通道已中止的服務出現故障,則不需要明確發送故障,WCF將爲您執行此操作。

+0

但仍然這不回答我的問題 – 2012-01-19 10:02:02

+0

請參閱更新到我的答案 – 2012-01-19 10:53:41