WCF Faulting强制我重启服务器和客户端

时间:2012-01-17 13:18:29

标签: wcf wcf-client

我将WCF用于ASP.Net MVC 2应用程序。 当服务出现故障时,我需要继续重启服务器和客户端。 通道出现故障是错误。

为什么会这样?为什么我会收到此错误,您建议我避免重新启动的习惯,因为这是非常耗时的。

EDIT1: 我使用block来托管服务。 我将提供一个带有示例代码的小程序,以便尽快重现问题。

编辑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 个答案:

答案 0 :(得分:2)

您不应将ServiceHost包装在使用块中!

详情请见此处: http://www.danrigsby.com/blog/index.php/2008/02/26/dont-wrap-wcf-service-hosts-or-clients-in-a-using-statement/

<强>更新

关于向调用者发送错误:是的,一般来说,您应该将服务上的异常作为SOAP错误返回给调用者。这就是SOAP故障的设计目的。

但是,您应该为要返回调用方的每种类型的故障定义故障合同。

作为指导原则,您应该只发送调用者可以有意义地处理并从中恢复的错误(通过重试或其他操作)。

如果您的呼叫者的频道已中止的服务出现故障,则您无需明确发送故障,WCF将为您执行此操作。