gpt4 book ai didi

c# - WCF 代理使用

转载 作者:太空宇宙 更新时间:2023-11-03 14:11:09 24 4
gpt4 key购买 nike

This answer已发布以回应 this question .

现在有点超出我的理解范围,但是“高阶函数”应该在客户端代理类中使用吗?这是正确的用法吗?:

public class MyProxy
{
readonly IMyService service =
new ChannelFactory<IMyService>("IMyService").CreateChannel();

public ResponseObject Foo(RequestObject request)
{
return UseService((IMyService service) =>
service.Bar(request));
}

T UseService<T>(Func<IIssueTrackerService, T> code)
{
bool error = true;

try
{
T result = code(issueTrackerChannel);
((IClientChannel)issueTrackerChannel).Close();
error = false;
return result;
}
finally
{
if (error)
{
((IClientChannel)issueTrackerChannel).Abort();
}
}
}
}

我真正需要的是这里的一些指导,以及执行此操作的正确方法。

最佳答案

这其实还不错。也许您可以转换为 ICommunicationObject,因为您的主机也需要相同的代码。

想来亲近的方式就是友情呼唤。请结束我的通话并将代理返回到连接池。中止是“我不在乎,关闭代理,因为它已经死了,也因为它已经死了,所以也将其从池中删除”。

根据您的代码,如果可能,您可能希望从函数调用部分抽象出代码的“WCF 代理”部分。这样您就可以独立于 WCF 代理代码对您的应用程序逻辑进行单元测试。

您可能需要查看 try {} catch (CommunicationException),这样您就可以将 WCF 异常也单独处理为应用程序级异常,而不是 finally。

try 
{
try
{
proxy.call();
//app logic

((ICommunicationObject)proxy).Close();
}
catch (SomeAppException)
{
//recover app exception
}
}
catch (CommunicationException)
{
((ICommunicationObject)proxy).Abort();
}

关于c# - WCF 代理使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7827788/

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