2011-08-23 18 views
2

我有一個ASP.NET web服務(.asmx)與接收int陣列(int[])和可空int陣列(int?[])作爲參數的方法。我還有一個測試Web應用程序,通過服務引用來使用此Web服務。用途/方法產生的簽名爲int [] insted的ArrayOfInt對.NET網絡服務

問題是,每次我在Web服務代碼中更改某些內容時,都會重新編譯它並更新測試應用程序中的服務引用,爲測試應用程序上的Web服務方法生成不同類型的參數。例如:

在第一構建和服務更新,在測試程序由Visual Studio產生的方法的簽名是:

void MyMethod(int[] firstParam, int?[] secondParam)

然後我做出一些改變,做一遍,並得到如下:

void MyMethod(ArrayOfInt fistParam, ArrayOfInt1 secondParam)

(與ArrayOfIntint[]ArrayOfInt1是的int?[]相當於相當於)。

一旦多了,我得到:

void MyMethod(ArrayOfInt1 firstParam, ArrayOfInt secondParam)

ArrayOfIntArrayOfInt1 swaped(ArrayOfInt1現在正在int[]ArrayOfInt是的int?[]相當於相當於)。



我真正想要的是使用簡單int[]int?[]類型(不管多少次,我重新編譯和更新服務參考!)。我怎樣才能做到這一點?

+0

沒有人會找到原因嗎?這個愚蠢的行爲是否會讓人感到厭煩? – Raphael

+1

您使用的是ASP.NET(asmx)web服務還是WCF? – CodingWithSpike

+0

聽起來像你應該打開WCF – Seb

回答

0

嘗試使用wsdl.exe工具生成Web服務代理,而不是使用Visual Studio。

這個工作適合我!

+0

是什麼讓你覺得這會解決他的問題?你有這個問題,然後通過使用wsdl.exe解決它? –

+0

是的,當我使用wsdl.exe時,我可以使用int []代替ArrayOfInt()。 –

+0

它工作正常,但我在Visual Studio中尋找解決方案。如果沒有人爲此提供解決方案,我會接受這個答案,因爲我認爲Visual Studio根本無法做到這一點。 – Raphael

0

我知道這是舊的,但我碰到了同樣的問題。對我而言,差異在於添加了Web引用而不是服務引用。

在VS,執行以下操作:

  1. 單擊鼠標右鍵,選擇添加>服務引用
  2. 左下角
  3. 點擊高級按鈕單擊添加Web引用左下角的按鈕
  4. 添加網址和參考名稱,然後點擊添加引用

我的web引用正確添加了int[]參數的方法。

編輯:Here是一個更好的答案與漂亮的圖片來說明!

編輯2:This answer擺脫了ArrayOfXXXList<XXX>愚蠢不使用傳統的技術,所以雙贏據我所關注的。現在,如何在工具中做到這一點?或者是只有你可以通過直接編輯文件來做些什麼?

+0

壞主意。嘗試在「添加服務參考」中指定集合的​​類型。重新使用傳統技術來獲取'int []'作爲參數類型是沒有意義的。 –

+0

對於我的情況它已經是一個ASMX文件,所以不是真的「倒退」 - 沒有回去。 OP還談到它是一個ASMX文件。如果我沒有獲得WCF的好處,我真的不明白爲什麼我需要擔心它。如果我需要更多,我將不會首先使用ASMX。 :) –

+0

不,你的_service_是ASMX。這不是_client_成爲ASMX的原因。 –