如何仅针对某些端点从 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 信息?

WCF 如何从 wsdl 和 xsd 生成服务 - 合同优先

如何从现有的 WSDL 和 XSD 文件生成 WCF 服务主机

如何在 WSDL 中使用 HTTPS 为卸载 SSL 后的 WCF 服务配置服务端点

使用 .NET Core 3.1 生成 WCF wsdl 客户端的问题

能否结合来自 WCF 服务的 WSDL 和 XSD 数据?