在.NET Core中调用.NET Framework开发的WCF服务报错如何解决
问题修复方案
方案1:直接在.NET Core项目中调用WCF服务(推荐)
- 首先修复代码中的异步调用错误:你的
NameSake方法已经标记为async,但调用EstopAsync时未加await关键字,这会导致异常无法被当前catch捕获,同时返回未完成的Task对象。将对应行修改为:
var res = await _motionSimulatorClient.EstopAsync();
- 确认已安装正确的NuGet依赖:必须安装
System.ServiceModel.NetTcp和System.ServiceModel.Primitives两个包,版本需和你项目使用的.NET Core/.NET SDK版本匹配。 - 修复服务引用生成警告:如果生成引用时出现警告,优先确认WCF服务端已开启元数据发布,也可以改用服务端的http元数据地址生成引用,避免net.tcp元数据获取异常。
- 生成同步方法(可选):使用Microsoft WCF Web Service Reference Provider生成服务引用时,在配置界面勾选生成同步操作选项,即可生成同步调用方法,不需要强制使用异步接口。
- 检查网络连通性:先在开发机执行
Test-NetConnection 192.168.184.33 -Port 8458验证端口连通性,同时确认虚拟机防火墙开放了8458端口的入站规则,WCF服务端已正确启用net.tcp协议支持。 - 验证绑定配置一致性:确认WCF服务端的NetTcpBinding安全模式也设置为
SecurityMode.None,客户端和服务端绑定配置不一致会直接导致连接失败。
方案2:.NET Framework代理dll引用问题说明
你采用的.NET Framework项目生成代理dll供.NET Core引用的方案本身不可行,.NET Framework的WCF实现基于专属的System.ServiceModel类库,和.NET Core的WCF客户端实现完全不兼容,跨框架引用必然会报运行时错误,不建议使用该方案。
内容的提问来源于stack exchange,提问作者Harsh Raj
相关产品推荐
相关产品推荐

