5

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

有没有办法我可以做到这一点?

4

3 回答 3

6

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

于 2009-03-31T15:57:27.497 回答
3

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

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

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

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

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

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

于 2009-03-31T17:51:48.640 回答
2

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

你需要定义你的服务契约(服务叫什么;可以调用什么方法)并且你需要决定如何托管它,例如你可以在什么地址调用这个服务,以及需要什么参数(例如HTTP 与 TCP,安全或不安全等) - 即使在 WCF 中也是如此。

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

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

马克

于 2009-03-31T15:55:57.173 回答