我将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);
}
在客户端,我已为此服务添加了服务引用。
我应该处理所有类型的异常并将其使用故障抛给客户端吗?
答案 0 :(得分:2)
您不应将ServiceHost包装在使用块中!
<强>更新强>
关于向调用者发送错误:是的,一般来说,您应该将服务上的异常作为SOAP错误返回给调用者。这就是SOAP故障的设计目的。
但是,您应该为要返回调用方的每种类型的故障定义故障合同。
作为指导原则,您应该只发送调用者可以有意义地处理并从中恢复的错误(通过重试或其他操作)。
如果您的呼叫者的频道已中止的服务出现故障,则您无需明确发送故障,WCF将为您执行此操作。