2012-01-17 106 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