代码之家  ›  专栏  ›  技术社区  ›  jhunter

WebMethod在参数中接收空值

  •  6
  • jhunter  · 技术社区  · 15 年前

    我有一个Web服务,它的方法有两个字符串参数。在调试时,我可以在调用方法中看到它向方法传递两个字符串值,但实际上,两个值的webmethod都为空。下面是一些代码:

    网络方法

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

    调用方法

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

    我在这里做错什么了?

    --编辑——

    添加更多代码。

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

    使用该服务的网页(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;
    }
    
    2 回复  |  直到 9 年前
        1
  •  8
  •   cjk    15 年前

    您是否创建了这个WebService,然后将它连接到您的其他代码上,或者您是否设计了该WebService以使用与另一个相同的接口?

    我做了最后一次,并更改了webmethod中参数的大写,这导致我收到的是空值,而不是正确的值。

        2
  •  0
  •   Tallmaris    14 年前

    就在今天,我遇到了这个问题,最后,通过简单地更新服务(如Darin建议的那样)解决了这个问题。发生的是我重命名了webmethod中的一些参数,但客户端仍在使用旧名称发送请求。