C# 如何使用.Net core 3.1版本中的WCF服务
我有一个WCF服务,它是使用.NETFramework 4.7开发的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();
现在,我必须使用.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
}