【问题标题】:Call .Net 3.5 WCF service from .Net 2.0 Standard ASMX Web Service Client从 .Net 2.0 标准 ASMX Web 服务客户端调用 .Net 3.5 WCF 服务
【发布时间】:2010-10-16 15:29:56
【问题描述】:

我创建了一个托管在已安装 .Net 3.5 的服务器上的服务,我需要从仅安装了 .Net 2.0 的客户端调用此服务。

有什么办法可以做到吗?

【问题讨论】:

    标签: c# wcf .net-3.5 .net-2.0 asmx


    【解决方案1】:

    如果您的 WCF 服务使用 basicHttpBinding 公开一个端点,那么 .NET 2.0 客户端应该可以使用它。正如 Marc 所说,“没问题”。

    【讨论】:

    • .NET 2.0 不包含任何可以消耗 net.tcp 或 wsHttp 的东西,除了 WSE,这是比疾病更糟糕的治疗方法。
    • 那么,我应该使用什么样的绑定,现在我使用 wsHttp,它似乎根本不起作用
    • 好的,我目前正在尝试,但出现此错误:请求失败,HTTP 状态 415:无法处理消息,因为内容类型为 'application/soap+xml;字符集=utf-8; action="tempuri.org/MyService/MyMethod"' 不是预期的类型 'text/xml; charset=utf-8'.. 有什么想法吗?
    • 忘记我的上一条评论,我修复它(刷新我的网络参考...)谢谢!
    【解决方案2】:

    是的,你可以做到。但是,有一些警告:

    您必须使用匹配的协议。标准 .NET 2.0 库不支持许多安全 Web 服务功能;事实上,如果您想被默认安装的 .NET 2.0 使用,您几乎只能在 WCF 服务上使用 basicHttpBinding。这在许多企业场景中是一个严重的限制。但是,它可能就是您所需要的。

    如果您需要更高的安全性但仍在使用 .NET 2.0,还有其他选择。同样,您的 WCF 服务必须适应您的 .NET 2.0 客户端,但您的 .NET 2.0 客户端还需要利用外部库。具体来说,您需要 Microsoft 推出的Web Service Enhancements。但是请记住,这些库实现了一些 SOAP 协议的 beta 版本,而 WCF(在许多方面是 WSE 的继承者)默认实现了这些标准。由于协议中有一些重大更改(特别是 WS-Addressing),因此您必须在 WCF 服务上提供一个customBinding 端点来适应。

    很遗憾,我无法告诉您将使用哪个协议,因为这取决于您希望在服务上采用哪种协议,但您的大部分问题都可以通过更改 textMessageEncoding 的 messageVersion 来解决用于自定义绑定。这不是最好的方案,但如果您尝试集成客户端,它可能会给您带来一些好处。

    归根结底,要让 .NET 2.0 客户端与 WCF 服务对话以获取除 basicHttpBinding 之外的任何内容,还有很多工作要做。在许多情况下,basicHttpBinding 可能就足够了。对于许多企业场景,它不会。我不能说哪个对你有帮助,但是可以让它工作的——我已经成功地做到了。

    但这是一个很大的痛苦。如果可以,请寻找替代方案。

    【讨论】:

      【解决方案3】:

      当然可以——托管在 .NET 3.5 上的服务不需要客户端上具有相同版本的 .NET 框架。哎呀——你甚至可以从 Java 或 PHP 调用这样的服务!这就是面向服务架构的全部要点! :-)

      您需要定义您的服务合同(服务称为什么;可以调用哪些方法)并且您需要决定如何托管它,例如您可以在什么地址调用此服务,以及需要哪些参数(例如 HTTP 与 TCP、安全或不安全等)——即使在 WCF 中,这也是很多工作。

      这是 WCF 的三篇介绍性文章 - 查看它们!

      但是从 .NET 2.0 客户端调用该服务绝对没问题!

      马克

      【讨论】:

      • 这不是 100% 正确的。很大程度上取决于网络服务协议。
      • 是的,当然 - 协议和安全设置等必须匹配 - 但客户端是 .NET 2.0 而服务是 .NET 3.5 的事实不会出现任何问题。
      • 问题是,.NET 2.0 库不支持 WCF 支持的默认协议——在许多情况下,当 .NET 2.0 出现时它们并不存在或尚未最终确定。所以这根本不是“绝对没有问题”;这是一个巨大的问题。
      • 我认为这里的重点是您可以将已编译的 WCF 程序集配置为可从 2.0 访问,而无需使用不同的设置重新编译它(在本例中,通过更改 Web.config /App.config 的宿主应用程序)
      猜你喜欢
      • 2012-05-29
      • 2013-07-03
      • 2012-08-26
      • 2011-01-10
      • 1970-01-01
      • 2016-01-07
      • 2010-10-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多