在 .NET Core 6.0 (.NET 6) 中,调用 WCF 服务 是完全支持的,只要服务使用的是 basicHttpBinding 或类似 HTTP 协议的绑定(如 wsHttpBinding,但不推荐)
.NET Core不支持 net.tcp,只能用http形式。
.net core调用WCF服务有两种方式
一种是添加服务引用到项目中,这样可以直接调用WCF的方法,假如我们是调用第三方的wcf,可能就不知道第三方有哪些方法,所以添加服务引用到项目中,就可以直接调用
另一种是不添加服务引用到项目中,这就需要在项目中定义指定的接口,然后通过ChannelFactory 直接调用,注意:因为此时我们项目中没有wcf的方法(比喻可能不准确,大概意思就是我们项目中没有这个方法,添加服务引用就是有了这个方法),所以一定要定义接口。
此文档只讲解添加服务引用到项目中形式,也就是上面说的第一种。
- 确认已经有了WCF项目,并且能够引用
- 在需要引用的项目中,添加服务引用,以vs2022为例:右键项目,选择添加–服务引用
在上图输入uri链接,这个链接可以在WCF项目的配置文件中找到
本地调试中我用的是这个,线上还有待试验,另外是否需要添加http形式也有待试验
然后一直下一步直到成功
之后可以在这里看到已经配置成功
4. 调用WCF的方法
var binding = new BasicHttpBinding();
var endpoint = new EndpointAddress("http://127.0.0.1:8001/myservice");
CustomerServiceDelegateClient client = new CustomerServiceDelegateClient(binding,endpoint);
try
{
var res= await client.AddTrackDetailsAsync(item.TbsId, item.TrackDetails.ToArray(), null);
return res.AddTrackDetailsResult;
}
finally
{
client.Close();
}
- 调试:启动本地的wcf项目,启动项目,正常情况下可以跑到wcf项目
- 问题: 可能调不到wcf项目,是因为.new core不支持tcp协议,所以wcf的配置文件里面要添加basicHttpBinding
<service name="myservice">
<endpoint address="" binding="basicHttpBinding" contract="myservice" />
<host>
<baseAddresses>
<add baseAddress="http://127.0.0.1:8001/myservice" />
</baseAddresses>
</host>
</service>
已有的不需要删除,只需要添加http的就可以