2011-11-21 44 views
6

我有一個應用程序根據用戶的計算機是32位還是64位,進行Web服務調用以獲取MSI的URL。整數值在Web服務調用中丟失

調用GetURLByOS需要2個方法(1.字符串AuthenticationInfo,2. int osBit)。在我調試時,我可以看到身份驗證信息。調用Web服務時,osBit的值爲8(對於64位)。但實際上在Web服務中它的價值已經失去(0)。

有人可以幫我找出爲什麼整數值丟失?

更新: 我附加到過程。在客戶端中,我看到值8被傳入。在Web服務調用中,我看到0. 這是一個SOAP Web服務調用。 這裏的客戶端上的WSDL代碼:

[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://mydomain.com/product/1.0/GetURLByOs", RequestNamespace = "http://mydomain.com/product/1.0", ResponseNamespace = "http://mydomain/product/1.0", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] 
     public string GetURLByOs(string eTicket, int OsBitType) 
     { 
      object[] results = this.Invoke("GetURLByOs", new object[] { 
         eTicket, OsBitType}); 
      return ((string)(results[0])); 
     } 

下面是實際的Web服務:

[WebMethod] 
     public string GetURLByOs(string eTicket, int osBitType) 
     { 
      return MyFacade.GetUrl(eTicket, osBitType); 
     } 

BTW,當我改變參數輸入字符串,它被正確地傳遞(值「8」) 。只有當我將它作爲一個整數傳遞給值時,它纔會被清零。

+3

您是否偶然在客戶端擁有過時的綁定/代理? – BrokenGlass

+1

你使用WCF嗎?而當你說這個值是「丟失」的時候,你的意思是說,當你將一個調試器附加到你的Web服務並將你的參數放在一個手錶中時,它顯示的值爲0? –

+1

對不起,但是如果沒有別的東西繼續下去(代碼,WSDL等),這幾乎是不可能的... –

回答

3

我發現了什麼問題。在(客戶端)WSDL代碼上,參數是OsBitType。但在實際的Web服務上,參數是osBitType。將Web服務參數更改爲OsBitType後,它工作正常。

奇怪的是,如果參數是字符串,則不會發生這種情況。

1

對於我的情況,在更新Web服務引用後,它工作正常。