Web Services 是否在客户端应用程序中以代码形式创建WCF终结点配置?

tpgth1q7  于 2022-11-15  发布在  其他
关注(0)|答案(2)|浏览(127)

我正在尝试使用.NET客户端应用程序中的WCF Web服务,并且我认为我需要能够以编程方式创建终结点,但我不知道如何创建。我认为我需要这样做,因为当我尝试运行该应用程序时,我收到以下错误:
在ServiceModel客户端配置节中找不到引用协定“IEmailService”的默认终结点元素。这可能是因为找不到应用程序的配置文件,或者在客户端元素中找不到与此协定匹配的终结点元素。
在解决此错误时,我创建了一个简单的Windows窗体应用程序,尝试在其中使用相同的Web服务。使用此测试应用程序,我可以成功连接到Web服务,并获得有效响应。但是,通过从应用程序的app.config文件中删除system.serviceModel节点及其所有子节点,我可以在我的测试应用程序中重现上面引用的错误(我可能不需要删除所有的部分,我不确定)。所以,我的第一个想法是,我需要将该部分添加到真实的的应用程序的app.config文件中,一切都应该是好的。不幸的是,由于一些荒谬的原因,我不会在这里讨论,这不是一个选项。所以,我不得不在客户端应用程序中用代码生成这些信息。
我希望这里有人能帮助我解决这个问题,或者能为我提供解决这类问题的好资源。
是否可以在客户端应用程序中以代码的形式创建端点配置?

l7mqbcuq

l7mqbcuq1#

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

使用这种设置,根本不需要配置文件--你在代码中定义了一切。当然,你也可以在代码中设置绑定和/或端点的任何其他属性。

unhi4e5o

unhi4e5o2#

如果您引用了定义接口的程序集,则使用WCF服务的最简单方法是使用System.ServiceModel.ChannelFactory类。
例如,如果要使用BasicHttpBinding:

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

如果没有对服务组合件的引用,则可以在生成的代理类上使用重载构造函数之一来指定绑定设置。

相关问题