【发布时间】:2010-10-16 15:29:56
【问题描述】:
我创建了一个托管在已安装 .Net 3.5 的服务器上的服务,我需要从仅安装了 .Net 2.0 的客户端调用此服务。
有什么办法可以做到吗?
【问题讨论】:
标签: c# wcf .net-3.5 .net-2.0 asmx
我创建了一个托管在已安装 .Net 3.5 的服务器上的服务,我需要从仅安装了 .Net 2.0 的客户端调用此服务。
有什么办法可以做到吗?
【问题讨论】:
标签: c# wcf .net-3.5 .net-2.0 asmx
如果您的 WCF 服务使用 basicHttpBinding 公开一个端点,那么 .NET 2.0 客户端应该可以使用它。正如 Marc 所说,“没问题”。
【讨论】:
是的,你可以做到。但是,有一些警告:
您必须使用匹配的协议。标准 .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 可能就足够了。对于许多企业场景,它不会。我不能说哪个对你有帮助,但是是可以让它工作的——我已经成功地做到了。
但这是一个很大的痛苦。如果可以,请寻找替代方案。
【讨论】:
当然可以——托管在 .NET 3.5 上的服务不需要客户端上具有相同版本的 .NET 框架。哎呀——你甚至可以从 Java 或 PHP 调用这样的服务!这就是面向服务架构的全部要点! :-)
您需要定义您的服务合同(服务称为什么;可以调用哪些方法)并且您需要决定如何托管它,例如您可以在什么地址调用此服务,以及需要哪些参数(例如 HTTP 与 TCP、安全或不安全等)——即使在 WCF 中,这也是很多工作。
这是 WCF 的三篇介绍性文章 - 查看它们!
但是从 .NET 2.0 客户端调用该服务绝对没问题!
马克
【讨论】: