如何仅针对某些端点从 WSDL 生成 WCF 客户端?
Posted
技术标签:
【中文标题】如何仅针对某些端点从 WSDL 生成 WCF 客户端?【英文标题】:How to generate a WCF Client from the WSDL only for certain endpoints? 【发布时间】:2021-02-10 18:23:19 【问题描述】:我有一个大型企业 Web 服务的 WSDL,它包括几个端点,我只打算使用其中一个。
我尝试通过向项目添加服务引用来在 Visual Studio 中生成服务客户端。问题是由于服务中可用的端点数量众多,Reference.cs
中生成的客户端代码最终有超过 1,400,000 行,Visual Studio 似乎很难处理它(IntelliSense 经常挂起,有时整个 VS 崩溃),我想构建时间也会因此而更长。
在数百个端点中,我只会使用一个,其余的都不需要。
有没有办法仅使用 Visual Studio 的服务参考 GUI 或 svcutil
从 WSDL 生成客户端代码?或者如果没有,是否有其他直接的方法可以做到这一点?
【问题讨论】:
您好,问题解决了吗?如果您认为我的回复对您有帮助,您可以将其标记为答案。 到目前为止,我能找到的唯一解决方案是手动编辑 WSDL,并删除我不需要的所有端点和数据模型。这有点麻烦,但它工作正常。 【参考方案1】:我没有找到从 WSDL 文件为某个端点生成客户端的任何方法。但是你可以通过通道工厂单独调用一个端点的服务。这里是demo:
EndpointAddress address = new EndpointAddress("http://localhost:8000/GettingStarted/CalculatorService1111");
BasicHttpBinding binding =new BasicHttpBinding();
ChannelFactory<ICalculator> factory = new
ChannelFactory<ICalculator>(binding, address);
ICalculator chanel = factory.CreateChannel();
您需要调用该端点并传入该端点的地址,定义相应的绑定,然后声明通道工厂。所以你可以调用服务中的方法。 通过使用通道工厂,您可以调用服务的任何端点。
【讨论】:
对,但是ICalculator
的代码从何而来?那部分代码是用 svcutil 还是 VS 生成的?以上是关于如何仅针对某些端点从 WSDL 生成 WCF 客户端?的主要内容,如果未能解决你的问题,请参考以下文章
WCF 如何从 wsdl 和 xsd 生成服务 - 合同优先
如何从现有的 WSDL 和 XSD 文件生成 WCF 服务主机
如何在 WSDL 中使用 HTTPS 为卸载 SSL 后的 WCF 服务配置服务端点