2008-09-25 46 views
7

我們已經使用了第三方web服務並試圖從ASP.NET web應用程序中調用它。 但是,當我實例化Web服務時拋出以下System.InvalidOperationException異常:方法'XYZ'不能被反映

方法'ABC.XYZ'無法反映。 System.InvalidOperationException: 方法'ABC.XYZ'無法反映。 ---> System.InvalidOperationException:從名稱空間 'http://mysoftware.com/ns' 的引用 一種方法和一種類型的XML元素 'MyDoc'。更改使用 WebMethodAttribute的 方法的消息名稱或使用 XmlRootAttribute改變 類型的根元素。

從我可以收集的東西看來,Web服務中的方法和類型之間似乎有些不明確之處。 任何人都可以澄清這種異常的可能原因,有什麼我可以做,以糾正這一點,或者我應該只是去網絡服務業主糾正?

編輯:Visual Studio 2008創建了代理類。不幸的是,我不能提供一個鏈接到wsdl,因爲它是本地安裝的第三方應用程序的Web服務。

回答

3

看來問題是到VS和Web服務之間的數據類型問題,這是用Java編寫的。

最終卻是固定通過手動編輯由VS.創建的類和模式文件

+0

您將此標記爲答案,但實際上忘了提及您如何解決它? – AaA 2015-01-23 07:04:38

+2

@BobSort很抱歉,很久以前才記得我做了什麼,但是它會沿着手動更新VS創建的代理類來訪問服務,以使用它期望的數據類型。 – 2015-01-23 14:34:59

1

我猜wsdl發出或提供的服務不是在wsdl.exe或serviceutil可以理解的形式 - 你可以發佈wsdl或鏈接到它?

你是如何創建代理類的?

另外你可能想嘗試和驗證對WSDL模式的WSDL來檢查其有效

2

我所遇到相同問題時,我耗費了第三方Web服務。在這個例子中,問題在於參考文件中的mustUndertand屬性正在尋找一個布爾值,命名空間屬性查找一個字符串。

通過通過參考我能idenitfy出錯的屬性,只是添加「覆蓋」的方法簽名期待。

並不理想,因爲任何時候你更新你必須做這個服務,但我找不到解決這個任何其他方式。

要找到參考文件從解決方案資源管理器中選擇「所有文件」

希望這有助於

0

我得到了相同的消息,但地雷是由丟失System.Runtime.Serialization.dll,因爲我試圖運行只.NET 2.0機器上安裝一個3.5應用程序引起的。

13

今天早些時候我遇到了同樣的問題。 原因是 - 由Visual Studio生成的類作爲參數傳遞到其中一個方法中沒有默認的無參數構造函數。一旦我添加它,錯誤消失了。

1

在我的情況下,我得到了「方法無法反映」的錯誤,因爲在方法返回的類中,我沒有公開默認的無參數構造函數。

我在VB.NET工作。在我的返回類中,我宣佈了一個「New(..)」方法,它接受了幾個參數(因爲這是我想在代碼中使用它的方式)。但是通過這樣做,我抑制了VB在幕後添加的默認(隱藏)無參數New()構造函數。顯然,Web服務處理程序要求提供無參數的構造函數。只要我在我的類中添加一個無參數的New()構造函數,它就可以正常工作。

0

我有同樣的問題,但我發現WebMethod參數之一有一個interface類型的成員,這就是爲什麼VS無法連載它。這裏是試圖下載的文件disco當異常

System.InvalidOperationException:無法序列成員 「Leopard.JobDespatchParameters.SendingUser」類型「Leopard.Interfaces.IUser」的 ,請參閱內部異常的更多細節 。 ---> System.NotSupportedException:無法序列化成員Leopard.JobDespatchParameters.SendingUser Leopard.Interfaces.IUser類型的成員,因爲它是一個接口。

0

舊的線程,但我有一個不同的問題,也許對某人的幫助。引用的dll在導致問題的數據層和服務層上的兩個版本之間混在一起。

0

可能發生此錯誤的另一種場景:我只是在我的Web服務中使用另一個具有相同名稱(但參數不同)的Web方法,這些方法在代碼合併期間滑入。我刪除了舊的方法後,它的工作。