从.Net 2.0标准ASMX Web服务客户端调用.Net 3.5 WCF服务

时间:2009-03-31 15:51:06

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

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

我有办法做到这一点吗?

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:3)

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

您必须使用匹配的协议。标准的.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端点以适应。

不幸的是,我不能告诉你你将使用哪个,因为它取决于你想要在服务上容纳哪个协议,但是你的大多数问题都可以通过改变{{3的} messageVersion来解决。用于自定义绑定。这不是最好的方案,但如果您尝试集成客户端,它可能会给您带来一些帮助。

总而言之,要使.NET 2.0客户端与基本HttpBinding以外的任何其他内容的WCF服务进行通信,还有很多工作要做。在许多情况下,basicHttpBinding可能就足够了。对于许多企业场景,它不会。我无法说出哪些会对您有所帮助,但 可能让它发挥作用 - 我已经成功完成了。

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

答案 2 :(得分:2)

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

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

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

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

马克