2011-02-23 118 views
14

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

Could not find default endpoint element that references contract 'IEmailService' in the ServiceModel client configuration section. This might be because no configuration file was found for your application, or because no endpoint element matching this contract could be found in the client element.

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

我希望这里有人能帮助我解决这个问题,或者可以指出我为这类问题提供了一个很好的资源。

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

回答

37

默认情况下,当您执行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); 

有了这个设置,需要完全没有配置文件 - 你用代码来定义一切。当然,您也可以在代码中设置绑定和/或端点的任何其他属性。

+4

这是完全**我需要的。我无法告诉你我多么感激这一点! – campbelt 2011-02-24 16:41:29

+0

什么是“YourServiceClient proxy = new YourServiceClient();” ?它是界面吗?它是客户端的端点名称吗?在app.config XAML中,它不允许我为标签添加名称。 – 2017-07-01 06:13:44

9

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

例如,如果你想使用basicHttpBinding的:

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

如果没有该服务集的引用,那么你可以使用重载的构造函数之一上生成的代理类指定绑定设置。

+0

谢谢,eulerfx。我对所有这些都是新手,所以我不确定如何在变量包含数据后使用该变量,但我会探索这个角度并查看它对我的影响。 – campbelt 2011-02-23 23:56:12

+0

非常感谢!我能够使用您的建议,以及位于以下地址的资源来解决这个问题:http://msdn.microsoft.com/en-us/library/ms734681.aspx – campbelt 2011-02-24 00:08:41

+0

Arg ...事实证明, ,虽然这确实允许我的测试应用程序工作正常,但system.serviceModel部分不在app.config中,出于某种原因,我仍然从实际应用程序中获得相同的错误。我会继续研究。 – campbelt 2011-02-24 00:21:06