【问题标题】:Can .Net Core 3.1 create connected client against WCF tcp mex?.Net Core 3.1 可以针对 WCF tcp mex 创建连接的客户端吗?
【发布时间】:2020-06-29 11:57:51
【问题描述】:

从 .Net Framework 迁移到 .Net Core 3.1 并且需要转换 WCF tcp/mex 客户端。我创建客户端的尝试导致:“未找到与 .Net 核心应用程序兼容的端点”。 Visual Studio 2019 生成连接客户端的工具标题为:“Microsoft WCF Web Service Reference Provider”。这让我想知道该工具是否仅适用于 web http/wsdl 端点,而不适用于 tcp/mex?

另一个线索是生成导致“警告:无法导入 wsdl 绑定”。这是有道理的,因为“定义语言”是mex。 (附注:如果我在 Visual Studio 2017 中使用 .Net Framework 针对同一个端点创建客户端,它工作得很好,所以端点是有效的。)

即使 .Net Core 最终可以与 tcp/mex 一起使用,我也需要决定这是否值得努力,还是应该硬着头皮转换为 gRPC?

【问题讨论】:

  • 这是一篇 5 年前的帖子,与 .Net Framework 相关,但与 .Net 核心无关,这是我的问题的核心。
  • 为什么现在的变化与 5 年前不同(添加 MEX 端点)?看起来除了去核心之外,你还添加了 mex。 mex 工作网络框架吗?
  • .Net Core 的第一个版本于 2016 年发布,直到 2019 年发布的 .Net Core 3 才支持任何形式的 WCF 通信。我没有添加 mex - 它已成为 . Net Framework 服务自从我在 2015 年投入生产以来一直运行良好。一篇 5 年前的文章无法解决我希望迁移到的去年刚刚发布的产品(.Net Core 3.0)的功能。
  • 不清楚您是否让 MEX 与 Net 一起工作。人们从 Core 2.0 升级到 3.0/3.1 时遇到了很多问题。这可能类似于其他 3.0/3.1 问题。你检查端点值了吗?是 V4 还是 V6?

标签: c# wcf .net-core


【解决方案1】:

“Microsoft WCF Web Service Reference Provider”支持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成功生成代理类。

【讨论】:

  • 我已经有一个 mex 端点(它已经投入生产了 5 年。)。虽然 WCF Web 服务参考提供程序可以生成合同类,但问题是这个关键警告:“未找到与 .Net 核心应用程序兼容的端点”。请参阅我的下一个帖子,即“答案”。
【解决方案2】:

我收到了一位 MSFT 支持人员的回复说,虽然 WCF Web 服务参考提供程序将导入 tcp/mex 元数据,但该解决方案并不完全支持消息安全(我认为这也意味着它也不支持传输消息安全。)也许该工具正在生成“未找到与 .Net 核心应用程序兼容的端点”,因为它检测到消息安全性。如果它指出为什么它没有找到兼容的端点,因为该端点目前正在生产中(正如我所说的与 .net 框架一起使用),会更清楚。

对我来说,消息安全比 TLS 安全更重要,因为它提供了授权。也就是说:如果您没有证书,则无法与我交谈。这是一个阻碍因素,再加上我无法在 .Net Core 中生成服务器组件的事实,这些都是交易破坏者。消息安全性已从 .Net 5(11 月发布)中推出,因此在 .Net 6 之前可能不会出现。

我已经有了一个 gRPC 原型,其工作时间比我研究这个 .Net 核心问题的时间还短,所以我继续前进。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    • 2021-08-03
    • 2020-12-02
    • 1970-01-01
    • 2015-11-04
    • 2010-11-18
    • 2018-01-05
    相关资源
    最近更新 更多