WCF代理使用情况

本文关键字:情况 用情 代理 WCF | 更新日期: 2023-09-27 18:11:50

这个答案是针对这个问题发布的。

这是一个小高于我的头现在,但"高阶函数"应该在客户端代理类中使用吗?这种用法正确吗?:

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();
            }
        }
    } 
}

我真正想要的是一些指导,以及正确的方法。

WCF代理使用情况

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

认为它是亲密的方式是友好的电话。请完成我的呼叫并将代理返回到连接池。Abort是"我不在乎,关闭代理,因为它已死,并将其从池中删除,因为它已死"。

根据您的代码,如果可能的话,您可能希望从函数调用部分抽象代码的"WCF Proxy"部分。这样,您就可以将应用程序逻辑与WCF代理代码分开进行单元测试。

你可能想看看try {} catch (CommunicationException),这样你就可以把你的WCF异常单独处理为应用程序级异常,而不是最后。

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