C# WCF代理使用
被贴出回应 现在这有点超出我的理解,但是“高阶函数”应该在客户端代理类中使用吗?这是正确的用法吗C# WCF代理使用,c#,.net,wcf,proxy,using-statement,C#,.net,Wcf,Proxy,Using Statement,被贴出回应 现在这有点超出我的理解,但是“高阶函数”应该在客户端代理类中使用吗?这是正确的用法吗 public class MyProxy { readonly IMyService service = new ChannelFactory<IMyService>("IMyService").CreateChannel(); public ResponseObject Foo(RequestObject request) {
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();
}
}
}
}
公共类MyProxy
{
只读IMyService服务=
新建ChannelFactory(“IMyService”).CreateChannel();
公共响应对象Foo(请求对象请求)
{
返回UseService((IMyService服务)=>
律师(请求));
}
T使用服务(功能代码)
{
布尔误差=真;
尝试
{
T结果=代码(issueTrackerChannel);
((IClientChannel)issueTrackerChannel.Close();
错误=错误;
返回结果;
}
最后
{
如果(错误)
{
((IClientChannel)issueTrackerChannel.Abort();
}
}
}
}
我真正想要的是这里的一些指导,以及正确的方法。这其实还不错。也许您可以转换为
ICommunicationObject
,因为主机也需要相同的代码
考虑这一点的方式是友好的电话。请完成我的呼叫并将代理返回到连接池。Abort是“我不在乎,因为代理死了而关闭代理,因为代理死了而将其从池中删除”
根据您的代码,如果可能,您可能希望从函数调用部分抽象代码的“WCF代理”部分。这样,您就可以独立于WCF代理代码对应用程序逻辑进行单元测试
您可能希望查看try{}catch(CommunicationException),这样您也可以将WCF异常单独处理为应用程序级异常,而不是最终处理
i、 e
try
{
try
{
proxy.call();
//app logic
((ICommunicationObject)proxy).Close();
}
catch (SomeAppException)
{
//recover app exception
}
}
catch (CommunicationException)
{
((ICommunicationObject)proxy).Abort();
}