.Net Core 3.1 可以针对 WCF tcp mex 创建连接的客户端吗?
Can .Net Core 3.1 create connected client against WCF tcp mex?
从 .Net Framework 迁移到 .Net Core 3.1 并且需要转换 WCF tcp/mex 客户端。我尝试创建客户端的结果是:“找不到与 .Net 核心应用程序兼容的端点”。 Visual Studio 2019 生成连接客户端的工具标题为:“Microsoft WCF Web 服务参考提供程序”。这让我问这个工具是否只适用于网络 http/wsdl 端点并且不适用于 tcp/mex?
另一个线索是生成导致“警告:无法导入 wsdl 绑定”。这是有道理的,因为 'definition language' 是 mex。 (P.S。如果我在 Visual Studio 2017 年针对同一端点使用 .Net Framework 创建客户端,它工作正常,因此端点有效。)
即使 .Net Core 可以与 tcp/mex 一起工作,我最终还是需要决定这是否值得,还是我应该硬着头皮转换为 gRPC?
“Microsoft WCF Web 服务引用提供程序”支持tcp/mex,您需要在代码中添加 mex 端点。
selfHost.AddServiceEndpoint(typeof(ICalculator), new NetTcpBinding(), "CalculatorService");
// Step 4: Enable metadata exchange.
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
// smb.HttpGetEnabled = true;
selfHost.Description.Behaviors.Add(smb);
Binding mexbinding = MetadataExchangeBindings.CreateMexTcpBinding();
selfHost.AddServiceEndpoint(typeof(IMetadataExchange), mexbinding, "mex");
服务运行成功后,“Microsoft WCF Web Service Reference Provider”可以根据URI成功生成代理class。
我收到 MSFT 支持人员的回复说虽然 WCF Web 服务参考提供程序将导入 tcp/mex 元数据,但该解决方案不完全支持消息安全(我假设这也意味着它不支持传输消息安全要么。)也许该工具正在生成“未找到与 .Net 核心应用程序兼容的端点”,因为它检测到消息安全性。如果它指出为什么找不到兼容的端点会更清楚,因为该端点当前正在生产中(正如我所说的,适用于 .net Framework。)
对我来说,消息安全性比 TLS 安全性更重要,因为它提供授权。也就是说:如果你没有证书,你就不能和我说话。这是一个阻碍,再加上我无法在 .Net Core 中生成服务器组件这一事实,这些都是交易破坏者。消息安全性已从 .Net 5(11 月发布)中推出,因此可能要到 .Net 6 才会出现。
我已经有了一个 gRPC 原型,它的工作时间比我研究这个 .Net 核心问题所花的时间还少,所以我继续前进。
从 .Net Framework 迁移到 .Net Core 3.1 并且需要转换 WCF tcp/mex 客户端。我尝试创建客户端的结果是:“找不到与 .Net 核心应用程序兼容的端点”。 Visual Studio 2019 生成连接客户端的工具标题为:“Microsoft WCF Web 服务参考提供程序”。这让我问这个工具是否只适用于网络 http/wsdl 端点并且不适用于 tcp/mex?
另一个线索是生成导致“警告:无法导入 wsdl 绑定”。这是有道理的,因为 'definition language' 是 mex。 (P.S。如果我在 Visual Studio 2017 年针对同一端点使用 .Net Framework 创建客户端,它工作正常,因此端点有效。)
即使 .Net Core 可以与 tcp/mex 一起工作,我最终还是需要决定这是否值得,还是我应该硬着头皮转换为 gRPC?
“Microsoft WCF Web 服务引用提供程序”支持tcp/mex,您需要在代码中添加 mex 端点。
selfHost.AddServiceEndpoint(typeof(ICalculator), new NetTcpBinding(), "CalculatorService");
// Step 4: Enable metadata exchange.
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
// smb.HttpGetEnabled = true;
selfHost.Description.Behaviors.Add(smb);
Binding mexbinding = MetadataExchangeBindings.CreateMexTcpBinding();
selfHost.AddServiceEndpoint(typeof(IMetadataExchange), mexbinding, "mex");
服务运行成功后,“Microsoft WCF Web Service Reference Provider”可以根据URI成功生成代理class。
我收到 MSFT 支持人员的回复说虽然 WCF Web 服务参考提供程序将导入 tcp/mex 元数据,但该解决方案不完全支持消息安全(我假设这也意味着它不支持传输消息安全要么。)也许该工具正在生成“未找到与 .Net 核心应用程序兼容的端点”,因为它检测到消息安全性。如果它指出为什么找不到兼容的端点会更清楚,因为该端点当前正在生产中(正如我所说的,适用于 .net Framework。)
对我来说,消息安全性比 TLS 安全性更重要,因为它提供授权。也就是说:如果你没有证书,你就不能和我说话。这是一个阻碍,再加上我无法在 .Net Core 中生成服务器组件这一事实,这些都是交易破坏者。消息安全性已从 .Net 5(11 月发布)中推出,因此可能要到 .Net 6 才会出现。
我已经有了一个 gRPC 原型,它的工作时间比我研究这个 .Net 核心问题所花的时间还少,所以我继续前进。