2009-05-27 7 views
6

J'ai un service Web avec une méthode qui a deux paramètres de chaîne. Quand je débogue, je peux voir dans ma méthode d'appel où il passe deux valeurs de chaîne dans la méthode, mais en réalité le WebMethod obtient juste la valeur null pour les deux valeurs. Voici le code:WebMethod reçoit null dans les paramètres

WebMethod

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

Appel de la méthode

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

Qu'est-ce que je fais mal ici?

--EDIT--

Ajout de plus de code.

Le service 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); 
    } 
} 

page Web en utilisant le service (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

Pouvez-vous poster l'intégralité du code? Je ne vois pas pourquoi cela devrait échouer. –

+0

Il y a trop peu d'informations fournies pour que cela soit répondu. Juste une supposition aveugle: essayez de régénérer votre proxy client. –

Répondre

8

Avez-vous créé ce webservice crochet puis à votre autre code, ou avez-vous conçu le webservice à utiliser la même interface que l'autre?

J'ai fait ce dernier une fois et changé la capitalisation des paramètres dans le WebMethod, ce qui m'a conduit à recevoir null au lieu des valeurs correctes.

+0

C'était tout, merci beaucoup. – jhunter

+0

OMG, j'ai lutté avec lui tant d'heures, merci beaucoup! –

0

Il m'est arrivé juste aujourd'hui et à la fin le problème a été résolu en mettant simplement à jour le service (comme Darin l'a suggéré). Ce qui s'est passé, c'est que j'ai renommé certains paramètres dans WebMethod mais le client utilisait toujours l'ancien nom pour envoyer la requête.

Questions connexes