gpt4 book ai didi

c# - 如何处理 WCF 上的故障状态? (在 Windows 服务中托管)

转载 作者:行者123 更新时间:2023-11-30 15:03:13 24 4
gpt4 key购买 nike

我将 WCF 作为 Widnows 服务托管,但我在处理 WCF channel 的故障状态时遇到了问题。 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..
}

故障状态我试着这样模拟:

    [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Single)]
public class Service1 : IService1
{
public string GetFault()
{
throw new Exception("Should went to fault..");
}

我是否正确使用它?谢谢。

最佳答案

您正在使用多个 CommunicationObject。当您在服务实现中抛出异常时, channel 出现故障,但主机却没有。 ServiceHost.Faulted 事件不适用于这种情况。

要记住的一点是,一旦 CommunicationObject 进入故障状态,就无法再使用。对有故障的 CommunicationObject 唯一能做的就是关闭/中止。在您的服务抛出异常后,如果您创建一个新 channel ,您仍然可以调用该服务。因此服务没有故障。

从架构的角度来看,服务宿主事件不是实现错误处理的“正确”位置。通常,您希望错误处理成为服务配置的一部分。例如,ServiceHost 事件中的错误处理不会轻易转移到 IIS 托管。您的评论听起来 IErrorHandler 不符合您的要求。您要实现什么要求?

关于c# - 如何处理 WCF 上的故障状态? (在 Windows 服务中托管),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11869641/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com