Cha*_*bub 3 .net c# wcf event-handling
我正在托管WCF作为Widnows服务,但我遇到了处理WCF通道的故障状态的问题.ServiceHost上的故障事件永远不会升起.
托管申请:
protected override void OnStart(string[] args)
{
_serviceHost = new ServiceHost(typeof(WCF_FaultTest.Service1));
_serviceHost.Faulted += _serviceHost_Faulted;
_serviceHost.Open();
}
void _serviceHost_Faulted(object sender, EventArgs e)
{
// never raise up..
}
Run Code Online (Sandbox Code Playgroud)
故障状态我尝试模拟这样:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Single)]
public class Service1 : IService1
{
public string GetFault()
{
throw new Exception("Should went to fault..");
}
Run Code Online (Sandbox Code Playgroud)
我正确使用它吗?谢谢.
您正在使用多个CommunicationObject.当您在服务实现中抛出异常时,通道出现故障,但主机却没有出现故障.在这种情况下,ServiceHost.Faulted事件不适用.
要记住的一件事是,一旦CommunicationObject进入故障状态,就不能再使用它了.出现故障的CommunicationObject唯一要处理的是关闭/中止.在您的服务抛出异常后,如果您创建新频道,您仍然可以调用该服务.因此,服务不会出现故障.
从体系结构的角度来看,服务主机事件不是实现错误处理的"正确"位置.通常,您希望错误处理成为服务配置的一部分.例如,ServiceHost事件中的错误处理不容易移动到IIS主机.你的评论听起来好像IErrorHandler不符合你的要求.你想要实施什么要求?
| 归档时间: |
|
| 查看次数: |
6376 次 |
| 最近记录: |