我正在尝试从.NET客户端应用程序中使用WCF Web服务,我认为我需要能够以编程方式创建端点,但我不知道如何。我想我需要这样做,因为当我尝试运行应用程序时,我收到以下错误:
无法找到默认端点 引用合同的元素 ServiceModel中的'IEmailService' 客户端配置部分。这个 可能是因为没有配置文件 是为您的申请找到的,或 因为没有端点元素匹配 这份合同可以在 客户元素。
在排除此错误时,我创建了一个简单的Windows窗体应用程序,我尝试使用相同的Web服务。使用此测试应用程序,我可以成功连接到Web服务,并获得有效的响应。但是,我可以在我的测试应用程序中通过从应用程序的app.config文件中删除system.serviceModel节点及其所有子节点来重现上面引用的确切错误(我可能不必删除所有该部分,我是不确定)。所以,我的第一个想法是我需要将该部分添加到真实应用程序的app.config文件中,一切都应该没问题。不幸的是,由于荒谬的原因,我不会进入这里,这不是一个选择。因此,我不得不在客户端应用程序内的代码中生成此信息。
我希望有人可以帮助我解决这个问题,或者可以指出我为这类问题寻找一个好的资源。
是否可以在客户端应用中使用代码创建端点配置?
答案 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/));
如果您没有对服务程序集的引用,则可以使用生成的代理类中的某个重载构造函数来指定绑定设置。