Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用.Net core 3.1版本中的WCF服务_C#_Wcf_.net Core_Asp.net Core 3.1_.net Core 3.1 - Fatal编程技术网

C# 如何使用.Net core 3.1版本中的WCF服务

C# 如何使用.Net core 3.1版本中的WCF服务,c#,wcf,.net-core,asp.net-core-3.1,.net-core-3.1,C#,Wcf,.net Core,Asp.net Core 3.1,.net Core 3.1,我有一个WCF服务,它是使用.NETFramework 4.7开发的 现在,我必须使用.Net Core3.1 Web应用程序以编程方式验证和解析WCF服务,而无需在Visual Studio解决方案资源管理器中添加WCF服务作为服务参考/添加连接服务选项我们还可以使用通道工厂调用WCF服务,此方法不需要添加服务引用,下面是一个演示: BasicHttpBinding basicHttpBinding = new BasicHttpBinding();

我有一个WCF服务,它是使用.NETFramework 4.7开发的


现在,我必须使用.Net Core3.1 Web应用程序以编程方式验证和解析WCF服务,而无需在Visual Studio解决方案资源管理器中添加WCF服务作为服务参考/添加连接服务选项

我们还可以使用通道工厂调用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相同。

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

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

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


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

这是否回答了您的问题@devNull我已经提到了上面的链接,但是看起来代码主要是为web服务和Core.NET3.1中的一些属性/方法开发的,这些属性/方法会出现引用错误。在我的例子中,我将获取WSDL URL、方法名称作为输入参数,现在我需要验证相同的WSDL URL并使用相同的方法。我不太明白您的意思。有两种方法可以调用WCF服务。一个是通过添加一个服务引用来调用它,生成一个代理类,另一个是使用上面介绍的通道工厂来调用它,上面的方法不需要使用资源管理器,您只需要添加代码来调用WCF服务。您建议的选项仍然是,只要WSDL URL发生更改并需要部署,就需要更新客户端代码。但在我的例子中,我将从网页中获得以下输入:1)WSDL url(WSDL url是动态的)2)要使用的方法名称,来自步骤中指定的WSDL url。1 3)方法的输入值,以便在WSDL url更改时,无需重新生成/更改客户端代码并部署项目/解决方案。WsdlImporter类存在于.net framework中以满足您的需要,但WsdlImporter不存在于core中。
[ServiceContract]
    public interface IService1
    {

        [OperationContract]
        string GetData(int value);

        [OperationContract]
        CompositeType GetDataUsingDataContract(CompositeType composite);

        // TODO: Add your service operations here
    }