2011-11-21 61 views
6

Ho un'applicazione che effettua una chiamata al servizio web per ottenere l'URL di un MSI a seconda che il computer dell'utente sia 32 bit o 64 bit.Il valore intero viene perso nella chiamata al servizio web

La chiamata GetURLByOS richiede 2 metodi (1. stringa AuthenticationInfo, 2. int osBit). Mentre eseguo il debug, posso vedere le informazioni di autenticazione. Il valore di osBit è 8 (per 64 bit) quando si chiama nel servizio web. Ma il suo valore è perso (0) quando effettivamente nel servizio web.

Qualcuno può aiutarmi a capire perché il valore intero è stato perso?

Aggiornamento: Sono collegato al processo. Nel client, vedo passare il valore 8. Nella chiamata al servizio web, vedo 0. Questa è una chiamata al servizio web SOAP. Ecco il codice WSDL sul client:

[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])); 
     } 

Ecco il servizio di web attuale:

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

BTW, quando cambio il parametro di tipo stringa, viene passata correttamente (valore "8") . È solo quando lo passo come numero intero che il valore è azzerato.

+3

hai un binding/proxy obsoleto sul client per caso? – BrokenGlass

+1

Stai usando WCF? E quando dici che il valore è "perso", intendi che quando colleghi un debugger al tuo servizio web e metti il ​​tuo argomento in un orologio, mostra un valore di 0? –

+1

Scusa, ma è quasi impossibile capire qualcos'altro (codice, WSDL, ecc.) ... –

risposta

3

Ho scoperto qual era il problema. Nel codice WSDL (client), il parametro è OsBitType. Ma sul servizio web attuale, il parametro è osBitType. Dopo aver modificato il parametro del servizio Web in OsBitType, funziona correttamente.

La cosa strana è che ciò non si verifica se il parametro è una stringa.

1

Per la mia situazione, dopo il riferimento di aggiornamento del servizio Web, funziona correttamente.

Problemi correlati