2009-04-22 72 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,使用服務器類型創建的服務器程序集的版本的依賴,而往往不是一個好主意。