首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建没有端点的WCF ChannelFactory?

创建没有端点的WCF ChannelFactory?
EN

Stack Overflow用户
提问于 2018-03-22 21:13:44
回答 1查看 442关注 0票数 1

我读到我们不应该在WCF客户端周围使用using。因此,我发现this awesome answer如何围绕它编写优雅的代码。

它并不完美,因为它不是异步的,也不返回任何值,所以我创建了我的版本(基于其他答案):

代码语言:javascript
复制
    public static async Task<TReturn> UseServiceAsync<TChannel, TReturn>(Func<TChannel, Task<TReturn>> code)
    {
        ChannelFactory<TChannel> _channelFactory = new ChannelFactory<TChannel>("NetTcpBinding_IMyService");
        TChannel channel = _channelFactory.CreateChannel();
        bool success = false;
        try
        {
            TReturn result = await code(channel);
            ((IClientChannel)channel).Close();
            success = true;
            return result;
        }
        finally
        {
            if (!success)
            {
                ((IClientChannel)channel).Abort();
            }
        }
    }

效果很好但是..。我不想在ChannelFactory中指定我的端点。我已经提供了合同接口!完全可以转到配置文件并查找该端点。为什么我必须显式地指定它?

顺便说一下。在上面提到的答案中,有一个链接到这篇文章。他们做了这样的事情:

public static ChannelFactory<T> _channelFactory = new ChannelFactory<T>("");

这是怎么回事??我不知道..

我的问题是:如何在不显式传递端点名称的情况下创建ChannelFactory?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-22 21:48:01

ChannelFactory<TChannel>来自抽象类ChannelFactory。创建自定义派生类,并使用InitializeEndpoint调用初始化端点。

例如:

代码语言:javascript
复制
public class SomeChannelFactory : ChannelFactory
{
    public SomeChannelFactory()
    {
        InitializeEndpoint( new BasicHttpBinding() , new EndpointAddress( "http://localhost/service" ) );
    }

    protected override ServiceEndpoint CreateDescription()
    {
        return new ServiceEndpoint( new ContractDescription( nameof( SomeChannelFactory ) ) );
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49438586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档