2009-05-27 9 views
6

Mam usługę sieciową z metodą, która ma dwa parametry łańcucha. Kiedy debuguję, widzę w mojej metodzie wywołania, w której przekazuje ona dwie wartości łańcuchowe do metody, ale w rzeczywistości WebMethod otrzymuje po prostu wartość zerową dla obu wartości. Oto kod:WebMethod odbiera wartość null w parametrach

WebMethod

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

wywołanie metody

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

Co robię źle tutaj?

--EDIT--

Dodawanie więcej kodu.

Usługa internetowa:

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

strony za usługę (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

Czy możesz opublikować cały kod. Nie widzę żadnego powodu, dla którego miałoby to zawieść. –

+0

Jest zbyt mało informacji, aby można było na nie odpowiedzieć. Po prostu ślepy domysł: spróbuj zregenerować serwer proxy klienta. –

Odpowiedz

8

Czy utworzyć ten usługa następnie podłączyć go do innego kodu, lub masz zaprojektował usługa do używać tego samego interfejsu co inny?

Zrobiłem to drugie raz i zmieniłem wielkość liter w parametrach WebMethod, co doprowadziło do otrzymania wartości null zamiast prawidłowych wartości.

+0

To było to, dziękuję. – jhunter

+0

OMG, zmagałem się z tym przez wiele godzin, wielkie dzięki! –

0

Zdarzyło mi się to właśnie dzisiaj, a na końcu problem został rozwiązany po prostu przez aktualizację usługi (jak sugerował Darin). Stało się tak, że zmieniłem nazwę niektórych parametrów w WebMethod, ale klient nadal używał starej nazwy do wysłania żądania.

Powiązane problemy