【问题标题】:Can a .Net 1.1 client call a .Net 2.0 web service? If so, how?.Net 1.1 客户端可以调用 .Net 2.0 Web 服务吗?如果是这样,怎么做?
【发布时间】:2011-02-16 14:52:49
【问题描述】:
我们终于将我们的网络服务从 .Net 1.1 升级到了 .Net 2.0/3.5。调用这些 Web 服务的客户端之一作为 Windows 服务运行。 windows服务很可能要等到客户站点升级服务器后一段时间才会升级。
是否可以对我的 .Net 2.0 Web 服务进行按摩,以便它们正确地为来自 .Net 1.1 客户端的调用提供服务?在我的测试环境中,我从 .Net 1.1 客户端连接到 .Net 2.0 Web 服务,并从 IIS 收到 401.1 错误。 Web 服务设置为匿名访问。从 .Net 2.0 客户端连接到 .Net 2.0 Web 服务时,相同的凭据有效。
感谢您的帮助,
-科林-
【问题讨论】:
标签:
web-services
.net-2.0
.net-1.1
backwards-compatibility
【解决方案1】:
Web 服务是平台中立的。如果您的 Web 服务编写正确,那么任何支持 SOAP 1.1 的平台上的任何客户端都应该能够使用它。
如果您的服务返回或接收特定于 .NET 的类型,可能失败的一个地方。例如,如果您发送或接收 DataSet,则可能会出现问题 - DataSet 不仅特定于 .NET,而且还特定于 .NET 的特定版本。在 .NET 1.1 和 .NET 2.0 之间的 XML 和 XML 序列化领域发生了许多变化,您最终会看到其中一个问题。
但我认为这些都不会让您收到 401 错误。查看事件日志,看看是否有任何关于该错误的有趣内容。
【解决方案2】:
这取决于服务。如果是 .NET 2.0 服务:
- 配置为支持 SOAP 1.1
- 不使用 WSE 3.0(WSE 2.0 可以)
- 不使用任何可为空的类型(.NET 1.1 不支持)
- 仅接受并返回原语或 POCO 类(无
DataSets 等)
那么就兼容了。
如果您收到 401.1 错误,但与同一台机器上的其他客户端连接没有问题,那么我的猜测是该服务期望 SOAP 标头中包含某些内容。 这是什么,我不能随便告诉你;我必须查看服务代码/配置。
或者,它可能只是网络服务器上的配置问题。如果没有关于可以/不能连接的特定环境的更多详细信息,很难说。
【解决方案4】:
感谢您的回复。他们有助于进一步诊断它为什么不起作用。事实证明,一切正常,401.1 响应具有误导性(但正确)。我们的问题是由于 Web 服务目录结构发生了变化。如果我更加注意,我可能在问这个问题之前就已经注意到了。
回答我的问题:是的。 .Net 1.1 客户端可以调用 .Net 2.0 Web 服务,通常不需要额外配置。只要确保你的 URI 是正确的。