如何以编程方式将客户端连接到 WCF 服务?

Posted

技术标签:

【中文标题】如何以编程方式将客户端连接到 WCF 服务?【英文标题】:How to programmatically connect a client to a WCF service? 【发布时间】:2011-02-25 22:54:23 【问题描述】:

我正在尝试将应用程序(客户端)连接到公开的 WCF 服务,但不是通过应用程序配置文件,而是通过代码。

我该怎么做呢?

【问题讨论】:

对于任何搜索这个的人,看看这个答案:***.com/a/839941/592732 【参考方案1】:

您必须使用 ChannelFactory 类。

这是一个例子:

var myBinding = new BasicHttpBinding();
var myEndpoint = new EndpointAddress("http://localhost/myservice");
using (var myChannelFactory = new ChannelFactory<IMyService>(myBinding, myEndpoint))

    IMyService client = null;

    try
    
        client = myChannelFactory.CreateChannel();
        client.MyServiceOperation();
        ((ICommunicationObject)client).Close();
        myChannelFactory.Close();
    
    catch
    
        (client as ICommunicationObject)?.Abort();
    

相关资源:

How to: Use the ChannelFactory

【讨论】:

太好了,谢谢。另外,以下是如何让 IMyService 对象在您的应用程序中使用:msdn.microsoft.com/en-us/library/ms733133.aspx 您应该将client 转换为IClientClient 才能关闭它。 在我的示例中,我假设IMyService 接口继承自System.ServiceModel.ICommunicationObject。我修改了示例代码以使其更清晰。 @EnricoCampidoglio 问题:您是否必须在每次要拨打电话时重新创建频道,或者您可以将 IService 存储在全局变量中以便在整个过程中重复使用?当我使用此方法测试我的连接时,它可以工作,但后来如果我尝试在单独的方法中执行调用,我会收到“无端点监听”错误? 我将它与this answer 结合使用,效果很好。谢谢【参考方案2】:

你也可以做“服务参考”生成的代码做的事情

public class ServiceXClient : ClientBase<IServiceX>, IServiceX

    public ServiceXClient()  

    public ServiceXClient(string endpointConfigurationName) :
        base(endpointConfigurationName)  

    public ServiceXClient(string endpointConfigurationName, string remoteAddress) :
        base(endpointConfigurationName, remoteAddress)  

    public ServiceXClient(string endpointConfigurationName, EndpointAddress remoteAddress) :
        base(endpointConfigurationName, remoteAddress)  

    public ServiceXClient(Binding binding, EndpointAddress remoteAddress) :
        base(binding, remoteAddress)  

    public bool ServiceXWork(string data, string otherParam)
    
        return base.Channel.ServiceXWork(data, otherParam);
    

其中 IServiceX 是您的 WCF 服务合同

然后是你的客户端代码:

var client = new ServiceXClient(new WSHttpBinding(SecurityMode.None), new EndpointAddress("http://localhost:911"));
client.ServiceXWork("data param", "otherParam param");

【讨论】:

以上是关于如何以编程方式将客户端连接到 WCF 服务?的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式使用证书身份验证配置 WCF 服务客户端

WCF 连接到 Websocket 服务器

使用 gSOAP 连接到 WCF Web 服务

当客户端甚至无法连接到 WCF 服务器时,为啥会出现“服务器堆栈跟踪”异常?

WCF 绑定 - 太多了!我该如何选择?

VB6 连接到 WCF