gpt4 book ai didi

c# - 在 WCF 服务 channel 调度程序上安装 IErrorHandler

转载 作者:太空狗 更新时间:2023-10-29 23:16:37 25 4
gpt4 key购买 nike

我想在 WCF 服务上安装 IErrorHandler 的实现。

我目前正在使用这段代码,它似乎没有做任何事情:

logServiceHost = new ServiceHost(typeof(Logger));
logServiceHost.AddServiceEndpoint(typeof(ILogger), binding, address);

// Implementation of IErrorHandler.
var errorHandler = new ServiceErrorHandler();

logServiceHost.Open();

// Add error handler to all channel dispatchers.
foreach (ChannelDispatcher dispatcher in logServiceHost.ChannelDispatchers)
{
dispatcher.ErrorHandlers.Add(errorHandler);
}

我见过的所有代码示例(包括在我用于 WCF 的书中)都展示了如何使用自定义创建的 IServiceBehavior 安装错误扩展。这是强制性的,还是我的方法也应该有效?

最佳答案

这是我如何让它工作的:

创建一个实现 IServiceBehavior 的类。服务行为将添加实现 IErrorHandler 的类:

public class GlobalExceptionHandlerBehavior : IServiceBehavior
{

public void AddBindingParameters(ServiceDescription serviceDescription, System.ServiceModel.ServiceHostBase serviceHostBase, System.Collections.ObjectModel.Collection<ServiceEndpoint> endpoints, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
{
}

public void ApplyDispatchBehavior(ServiceDescription serviceDescription, System.ServiceModel.ServiceHostBase serviceHostBase)
{
foreach (ChannelDispatcherBase dispatcherBase in
serviceHostBase.ChannelDispatchers)
{
var channelDispatcher = dispatcherBase as ChannelDispatcher;
if (channelDispatcher != null)
channelDispatcher.ErrorHandlers.Add(new ServiceErrorHandler());
}

}

public void Validate(ServiceDescription serviceDescription, System.ServiceModel.ServiceHostBase serviceHostBase)
{
}
}

在调用 .Open() 之前设置主机时插入行为:

logServiceHost.Description.Behaviors.Insert(0, new GlobalExceptionHandlerBehavior());

然后您应该能够在 ServiceErrorHandler 类的 ErrorHandler() 方法中放置一个断点,它应该会为您中断。这不需要 xml 配置,并且完全由代码驱动。

关于c# - 在 WCF 服务 channel 调度程序上安装 IErrorHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12070412/

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