2009-04-22 73 views
1

我正在设计一个在已经非常发达的应用程序中使用错误代码的框架。WSDL没有正确解释泛型

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

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

对于整数和字符串很容易传递错误代码(INT可以是实际的代码和字符串可以以某种方式将代码添加到结尾)。但是,对于数据集来说并不那么简单。因此,这个想法被传递来使用一个通用的容器,并把数据集和错误代码放在那里。

这里就是问题是:

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

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

"Cannot convert ErrorHandlerofDatasetType to type ErrorHandler<DatasetType>" 

林假设WSDL不正确或东西解释类。有人可以澄清这一点吗?

编辑:我也许应该提到这是一个.NET 2.0的解决方案。

回答

1

您的WSDL没有任何问题。

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

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

当创建客户端代理代码,WSDL中的XML架构检查。代码生成器将看到一个名为ErrorHandlerOfDatasetType的complexType,并自然会生成一个名为ErrorHandlerOfDatasetType的类。

现在,你似乎是试图施放此代理类的ErrorHandler,它显然不是。如果您使用的是“Web引用”(您没有说),那么您的客户端不应该有任何服务器数据类型。 ASMX Web服务不是以这种方式构建的。

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

注意,即使在WCF,使用服务器类型创建的服务器程序集的版本的依赖,而往往不是一个好主意。