gpt4 book ai didi

.net - 如何修复有故障的 WCF channel ?

转载 作者:行者123 更新时间:2023-12-02 20:20:02 25 4
gpt4 key购买 nike

当单ClientBase<T>实例用于多个WCF服务调用,它可以使 channel 进入故障状态(即当服务关闭时)。

我希望当服务再次出现时自动修复 channel 。我发现的唯一方法是在每个方法调用之前调用以下代码:

if (clientBase.InnerChannel.State == CommunicationState.Faulted)
{
clientBase.Abort();
((IDisposable)clientBase).Dispose();
clientBase = new SampleServiceClientBase();
}

我感觉这不是正确的做法。有人有更好的主意吗?

最佳答案

你不能。一旦 channel 出现故障,它就会永远出现故障。您必须创建一个新 channel 。 WCF channel 是有状态的(某种意义上来说),因此 channel 故障意味着状态可能已损坏。

您可以做的是将您正在使用的逻辑放入实用程序方法中:

public static class Service<T> where T : class, ICommunicationObject, new()
{
public static void AutoRepair(ref T co)
{
AutoRepair(ref co, () => new T());
}

public static void AutoRepair(ref T co, Func<T> createMethod)
{
if ((co != null) && (co.State == CommunicationState.Faulted))
{
co.Abort();
co = null;
}
if (co == null)
{
co = createMethod();
}
}
}

然后您可以使用以下命令调用您的服务:

Service<SampleServiceClient>.AutoRepair(ref service,
() => new SampleServiceClient(someParameter));
service.SomeMethod();

或者,如果您想使用默认的无参数构造函数,只需:

Service<SampleServiceClient>.AutoRepair(ref service);
service.SomeMethod();

由于它还可以处理服务为 null 的情况,因此您无需在调用服务之前初始化该服务。

几乎是我能提供的最好的。也许其他人有更好的方法。

关于.net - 如何修复有故障的 WCF channel ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2008382/

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