【问题标题】:WSDL not interpreting generic properlyWSDL 没有正确解释泛型
【发布时间】:2009-04-22 17:56:50
【问题描述】:

我正在设计一个框架,用于在已经非常开发的应用程序中使用错误代码。

有几个处理数据库交互的 Web 服务,然后是 UI。如果 Web 服务中发生错误,则需要将错误代码传递给 UI 并进行处理(以显示用户友好的错误消息或类似内容)。

现在,Web 服务方法传递三种对象:整数、字符串和数据集

对于整数和字符串,很容易传递错误代码(整数可以是实际代码,字符串可以以某种方式将代码添加到它的末尾)。但是,使用数据集并不是那么简单。因此,转而使用通用容器并将数据集和错误代码放入其中。

这就是问题所在:

当我创建通用容器并尝试使用它时,我收到以下错误:

(Lets assume my generic class is called ErrorHandler<DatasetType>)

"Cannot convert ErrorHandlerofDatasetType to type ErrorHandler<DatasetType>"

我假设 WSDL 对类的解释不正确或其他原因。有人可以解释一下吗?

编辑:我可能应该提到这是针对 .NET 2.0 解决方案的。

【问题讨论】:

    标签: c# asp.net web-services generics


    【解决方案1】:

    您的 WSDL 没有任何问题。

    WSDL 依赖于 XML Schema 来描述数据的形状。 XML Schema 没有泛型的概念。

    当 .NET 看到您创建 WSDL 的请求并看到您使用的是泛型类型时,它需要生成一个可以在 XML Schema 中使用的类型名称。这就是“ErrorHandlerOfDatasetType”的由来。

    创建客户端代理代码时,会检查 WSDL 中的 XML 模式。代码生成器会看到一个名为 ErrorHandlerOfDatasetType 的 complexType,自然会生成一个名为 ErrorHandlerOfDatasetType 的类。

    现在,您似乎正试图将此代理类强制转换为 ErrorHandler,但显然不是。如果您使用的是“Web Reference”(您没有说),那么您的客户端中不应该有任何服务器数据类型。 ASMX Web 服务不是这样构建的。

    如果您正在使用 WCF(并且应该),那么您可以设置“添加服务引用”对话框以在客户端和服务之间共享类型。老实说,我认为这对泛型没有帮助,因为正如我所说,知道 ErrorHandlerOfDatasetType 真正意味着 ErrorHandler 的必要信息不存在。

    请注意,即使在 WCF 中,使用服务器类型也会对​​服务器程序集的版本产生依赖性,这通常不是一个好主意。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-12
      • 2022-12-03
      • 1970-01-01
      • 1970-01-01
      • 2021-10-06
      • 2012-11-01
      • 1970-01-01
      相关资源
      最近更新 更多