2009-05-27 14 views
6

Tengo un servicio web con un método que tiene dos parámetros de cadena. Cuando estoy depurando, puedo ver en mi método de llamada donde pasa dos valores de cadena en el método, pero en realidad el WebMethod simplemente obtiene nulo para ambos valores. Aquí hay un código:WebMethod recibe nulo en los parámetros

WebMethod

[WebMethod(Description = "Set username and password for validation purposes.")] 
public void Login(string uname, string pword) 
{ 
    username = uname; 
    password = pword; 
} 

llamando al método

NewsletterEmailSubscribers nes = new NewsletterEmailSubscribers(); 
nes.Login("Username", "Password"); 

¿Qué estoy haciendo mal aquí?

--EDIT--

Agregando más código.

El servicio web:

[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[ToolboxItem(false)] 
public class NewsletterEmailSubscribers : WebService 
{ 
    private static string username, password; 

    public NewsletterEmailSubscribers() 
    { 

    } 


    /// <summary> 
    /// Logins the specified username. 
    /// </summary> 
    /// <param name="username">The username.</param> 
    /// <param name="password">The password.</param> 
    [WebMethod(Description = "Set username and password for validation purposes.")] 
    public void Login(string uname, string pword) 
    { 
     username = uname; 
     password = pword; 
    } 

    /// <summary> 
    /// Adds subscriber email account. 
    /// </summary> 
    /// <param name="emailAddress">The email address</param> 
    /// <param name="newsletterType">The newsletter they have signed up to receive</param> 
    /// <param name="validationCode">The validation code</param> 
    [WebMethod(Description = "Initial add of subscriber email address and newsletter signing up for.")] 

    public void AddSubscriber(
     string emailAddress, 
     string newsletterType, 
     string validationCode) 
    { 
     // Check some values 
     //Authenticate user, will throw exception if the user is invalid 

     using (SOAValidation validation = new SOAValidation()) 
     { 
      validation.ValidateConnection(validationCode, username, password, "Full"); 
     } 

     OracleParameterCollection parameters = new OracleParameterCollection(); 
     parameters.AddWithValue("subscriber_email", emailAddress); 
     parameters.AddWithValue("newsletter_type", newsletterType); 
     Database.ExecuteQuery("dw.newsletter_pkg.newsletter_subscriber_add", parameters); 
    } 
} 

página web utilizando el servicio (NewsletterEmailSubscribers)

private void SubmitEmail(string email) 
{ 
    if (ValidateEmail(email)) 
    { 
     try 
     { 
      NewsletterEmailSubscribers nes = new NewsletterEmailSubscribers(); 
      nes.Login("Username", "Password"); 
      string validationCode; 
      using (Cokesbury.RemoteValidation.Validator validator = new Cokesbury.RemoteValidation.Validator()) 
      { 
       validationCode = validator.ValidationCode(System.Configuration.ConfigurationManager.AppSettings["PasswordSalt"].ToString()); 
      } 

      // submit to db 
      nes.AddSubscriber(email, "FICT", validationCode); 
      // Switch to confirm message 
      mvPage.SetActiveView(vwThankYou); 
     } 
     catch (Exception ex) 
     { 
      mvPage.SetActiveView(vwFail); 
      bool rethrow = ExceptionPolicy.HandleException(ex, "Presentation Services Exception Policy"); 
      if (rethrow) 
      { 
       throw (ex); 
      } 
     } 
    } 
    else 
     lblEmailError.Visible = true; 
} 
+0

Puede publicar el código completo. No puedo ver ninguna razón por la que eso debería fallar. –

+0

Se proporciona muy poca información para que se pueda responder. Solo una suposición ciega: intente regenerar su proxy de cliente. –

Respuesta

8

¿Ha creado este servicio web a continuación, conectarlo a su otro código, o tienen que diseñó el servicio web a usar la misma interfaz que otro?

Hice esto último una vez y cambié el uso de mayúsculas de los parámetros en el WebMethod, lo que me llevó a recibir valores nulos en lugar de los correctos.

+0

Eso fue todo, muchas gracias. – jhunter

+0

¡Dios mío, he luchado tantas horas, muchas gracias! –

0

Me sucedió solo hoy y al final el problema se resolvió simplemente actualizando el servicio (como sugirió Darin). Lo que sucedió fue que cambié el nombre de algunos parámetros en el método WebMethod pero el cliente todavía estaba usando el nombre antiguo para enviar la solicitud.

Cuestiones relacionadas