0

我们终于将我们的网络服务从 .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 服务时,相同的凭据起作用。

谢谢你的帮助,

-科林-

4

4 回答 4

2

Web 服务是平台中立的。如果您的 Web 服务编写正确,那么任何支持 SOAP 1.1 的平台上的任何客户端都应该能够使用它。

如果您的服务正在返回或接收特定于 .NET 的类型,则可能会出现这种情况。例如,如果您发送或接收 DataSet,则可能会出现问题 - DataSet 不仅特定于 .NET,而且还特定于 .NET 的特定版本。在 .NET 1.1 和 .NET 2.0 之间的 XML 和 XML 序列化领域发生了许多变化,您最终会看到其中一个问题。

但我认为这些都不会让你出现 401 错误。查看事件日志,看看是否有关于该错误的有趣内容。

于 2010-05-07T00:18:01.490 回答
1

这取决于服务。如果 .NET 2.0 服务:

  • 配置为支持 SOAP 1.1
  • 不使用 WSE 3.0(WSE 2.0 可以)
  • 不使用任何可为空的类型(.NET 1.1 不支持)
  • 仅接受并返回原语或 POCO 类(否DataSets等)

然后就兼容了。

如果您收到 401.1 错误,但与同一台机器上的其他客户端连接没有问题,那么我的猜测是该服务期望 SOAP 标头中包含某些内容。 它在期待什么,我不能随便告诉你;我必须查看服务代码/配置。

或者,它可能只是 Web 服务器上的配置问题。如果没有有关可以/无法连接的特定环境的更多详细信息,很难说。

于 2010-05-07T00:20:20.100 回答
0

正如@Aaronaught 所写,错误可能是服务期望 SOAP headers 中的某些内容。要对此进行分析,您可以验证生成的 wsdl(展开 Web 参考的所有文件)或通过 svcutil.exe 下载元数据。这将生成一个代理,用于调用 Web 服务。
这样,您可以更好地控制代理。

如何使用 svcutil 的示例:

从命令提示符: svcutil http://service/metadataEndpoint

于 2010-05-07T12:16:45.613 回答
0

谢谢你的回复。他们有助于进一步诊断它为什么不起作用。事实证明,一切正常,401.1 响应具有误导性(但正确)。我们的问题是由于 Web 服务目录结构发生了变化。如果我更加注意,我可能在问这个问题之前就已经注意到了。

回答我的问题:是的。.Net 1.1 客户端可以调用 .Net 2.0 Web 服务,通常不需要额外的配置。只要确保你的URI是正确的。

于 2010-05-07T16:45:31.173 回答