在代码中,在客户端应用程序中创建WCF端点配置?

时间:2011-02-23 23:32:22

标签: wcf web-services endpoints

我正在尝试从.NET客户端应用程序中使用WCF Web服务,我认为我需要能够以编程方式创建端点,但我不知道如何。我想我需要这样做,因为当我尝试运行应用程序时,我收到以下错误:

  

无法找到默认端点   引用合同的元素   ServiceModel中的'IEmailService'   客户端配置部分。这个   可能是因为没有配置文件   是为您的申请找到的,或   因为没有端点元素匹配   这份合同可以在   客户元素。

在排除此错误时,我创建了一个简单的Windows窗体应用程序,我尝试使用相同的Web服务。使用此测试应用程序,我可以成功连接到Web服务,并获得有效的响应。但是,我可以在我的测试应用程序中通过从应用程序的app.config文件中删除system.serviceModel节点及其所有子节点来重现上面引用的确切错误(我可能不必删除所有该部分,我是不确定)。所以,我的第一个想法是我需要将该部分添加到真实应用程序的app.config文件中,一切都应该没问题。不幸的是,由于荒谬的原因,我不会进入这里,这不是一个选择。因此,我不得不在客户端应用程序内的代码中生成此信息。

我希望有人可以帮助我解决这个问题,或者可以指出我为这类问题寻找一个好的资源。

是否可以在客户端应用中使用代码创建端点配置?

2 个答案:

答案 0 :(得分:40)

默认情况下,当您执行Add Service Reference操作时,WCF运行时将为您生成客户端代理。

使用它的最简单方法是使用不带参数的构造函数实例化客户端代理,只需从app.config获取信息:

YourServiceClient proxy = new YourServiceClient();

这要求配置文件包含您的服务合同的<client>条目 - 如果没有,您将收到错误。

但是WCF运行时生成的客户端代理类也有其他构造函数 - 例如:一个采用端点地址和绑定:

BasicHttpBinding binding = new BasicHttpBinding(SecurityMode.None);
EndpointAddress epa = new EndpointAddress("http://localhost:8282/basic");

YourServiceClient proxy = new YourServiceClient(binding, epa);

使用此设置,根本不需要配置文件 - 您在代码中定义了所有内容。当然,您也可以在代码中设置绑定和/或端点的任何其他属性。

答案 1 :(得分:9)

如果您具有对定义接口的程序集的引用,则使用WCF服务的东方方法是使用System.ServiceModel.ChannelFactory类。

例如,如果您想使用BasicHttpBinding:

var emailService = ChannelFactory<IEmailService>.CreateChannel(new BasicHttpBinding(), new EndpointAddress(new Uri("http://some-uri-here.com/));

如果您没有对服务程序集的引用,则可以使用生成的代理类中的某个重载构造函数来指定绑定设置。