gpt4 book ai didi

wcf - channel 处于故障状态时 WCF 操作调用的重试机制

转载 作者:行者123 更新时间:2023-12-04 06:40:52 24 4
gpt4 key购买 nike

当 WCF channel 处于故障状态时,我试图找到一种优雅的方法来重试操作。我尝试使用 Policy Injection AB 重新连接并在第一次调用时发生故障状态异常时重试操作,但 PolicyInjection.Wrap 方法似乎不喜欢包装 TransparentProxy 对象(从 ChannelFactory.CreateChannel 返回的代理)。

有没有我可以尝试的其他机制,或者我如何尝试让 PIAB 解决方案正常工作 - 任何链接、示例等都将不胜感激。

这是我使用的失败的代码:var channelFactory = new ChannelFactory(endpointConfigurationName);var proxy = channelFactory.CreateChannel(...);proxy = PolicyInjection.Wrap<IService>(proxy);
谢谢你。

最佳答案

我宁愿使用回调函数,像这样:

    private SomeServiceClient proxy;

//This method invokes a service method and recreates the proxy if it's in a faulted state
private void TryInvoke(Action<SomeServiceClient> action)
{
try
{
action(this.proxy);
}
catch (FaultException fe)
{
if (proxy.State == CommunicationState.Faulted)
{
this.proxy.Abort();
this.proxy = new SomeServiceClient();
//Probably, there is a better way than recursion
TryInvoke(action);
}
}
}

//Any real method
private void Connect(Action<UserModel> callback)
{
TryInvoke(sc => callback(sc.Connect()));
}

在你的代码中你应该调用
ServiceProxy.Instance.Connect(user => MessageBox.Show(user.Name));

代替
var user = ServiceProxy.Instance.Connect();
MessageBox.Show(user.Name);

虽然我的代码使用代理类方法,但您可以使用 Channels 编写类似的代码。

关于wcf - channel 处于故障状态时 WCF 操作调用的重试机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4253578/

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