如何在 .Net Core 3.1 版本中以编程方式消费 WCF 服务

11
我有一个使用.Net Framework 4.7开发的WCF服务。
现在我需要使用.Net Core3.1 Web应用程序对WCF服务进行编程验证和解析,而无需在Visual Studio Solution Explorer中添加WCF服务作为“Service Reference/Add Connected Service”选项。

这个回答解决了你的问题吗?如何在.NET Core中消费WCF而不添加服务引用? - devNull
@devNull,我参考了上述链接,但是看起来这段代码主要是为 Web 服务开发的,并且在 .Net 3.1 核心中一些属性/方法会出现引用错误。在我的情况下,我将获取 WSDL URL、方法名称作为输入参数,现在需要验证相同的 WSDL URL 并调用相同的方法。 - user3237193
1个回答

8

我们还可以使用通道工厂来调用WCF服务,这种方法无需添加服务引用,以下是一个示例:

            BasicHttpBinding basicHttpBinding = new BasicHttpBinding();
            var address = new EndpointAddress("http://localhost:801/Service1.svc/Service");
           
            var factory = new ChannelFactory<IService1>(basicHttpBinding, address);
            IService1 channel = factory.CreateChannel();
            channel.GetData(1);
            Console.WriteLine(channel.GetData(1));
            Console.ReadLine();

在客户端,我们需要有一个ServiceContract:
[ServiceContract]
    public interface IService1
    {

        [OperationContract]
        string GetData(int value);

        [OperationContract]
        CompositeType GetDataUsingDataContract(CompositeType composite);

        // TODO: Add your service operations here
    }

这个ServiceContract与服务器端的ServiceContract相同。

由于您在核心中调用WCF,因此需要添加以下两个软件包:

enter image description here

如果您使用NetTcpBinding,则需要添加以下软件包:

enter image description here

此外,在核心中调用WCF时有一些限制。您可以参考此链接:

https://github.com/dotnet/wcf/blob/master/release-notes/SupportedFeatures-v2.1.0.md

如果问题仍然存在,请随时让我知道。


我不太明白你的意思。调用WCF服务有两种方式。一种是通过添加服务引用来生成代理类进行调用,另一种是使用我上面描述的通道工厂进行调用。 - Ding Peng
以上方法不需要使用资源管理器,您只需要添加代码来调用WCF服务。 - Ding Peng
您提出的选项仍需要在WSDL URL更改和需要部署时更新客户端代码。但在我的情况下,我将从网页获得以下输入: 1)WSDL URL(WSDL URL是动态的) 2)要从步骤1中提到的WSDL URL中使用的方法名称 3)方法的输入值因此,当WSDL URL更改时,无需重新构建/更改客户端代码并部署项目/解决方案。 - user3237193
WsdlImporter类存在于.NET框架中以满足您的需求,但是核心中不存在WsdlImporter。 - Ding Peng

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接