首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web Service >

【】Silverlight中调用WebService有关问题

2014-01-01 
【求救】Silverlight中调用WebService问题最近学习Silverlight,做了一个用户登录。数据库:SQL Server 2008服

【求救】Silverlight中调用WebService问题
最近学习Silverlight,做了一个用户登录。

数据库:SQL Server 2008

服务端:WebService.asmx和实体模型UserModel.edmx(UserEntities)

WebService代码为:


    /// <summary>
    /// WebServie 的摘要说明
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 
    // [System.Web.Script.Services.ScriptService]
    public class WebServie : System.Web.Services.WebService
    {
        #region 获得当前登录用户
        /// <summary>
        /// 获得当前登录用户
        /// </summary>
        /// <param name="loginName">登录名</param>
        /// <returns>当前登录用户</returns>
        [WebMethod]
        public T_User GetUser(string loginName)
        {
            using (UserEntities entity = new UserEntities())
            {
                return entity.T_User.Find(loginName);
            }
        } 
        #endregion
    }


在Silverlight项目中引用WebService服务,代码为:

public partial class LoginPanel : UserControl
    {
        private WebServieSoapClient client;

        public LoginPanel()
        {
            client = new WebServieSoapClient();
            InitializeComponent();
        }

        #region 登录验证
        private void btnLogin_Click(object sender, RoutedEventArgs e)
        {
            client.GetUserCompleted += client_GetUserCompleted;
            client.GetUserAsync(txtLoginName.Text);
        }

        private void client_GetUserCompleted(object sender, GetUserCompletedEventArgs e)
        {
            if (e.Error == null)
            {
                string loginName = txtLoginName.Text;
                string pwd = txtPWD.Password;
                T_User user = e.Result;

                if (user == null)
                {
                    tbWARN.Text = "该用户不存在!";
                }

                if ((user != null) && (user.LoginName == loginName))
                {
                    if (user.Pwd != pwd)
                    {
                        tbWARN.Text = "密码错误!";
                    }
                    else
                    {


                        MessageBox("验证成功!");
                    }
                }
            }
            else
            {
                throw e.Error;
            }
        } 
        #endregion
    }



运行项目,问题出现了,输入正确的用户名和密码:
第一次点登录按钮,弹出MessageBox;
然后又点登录按钮,弹出两次MessageBox;
再点登录按钮,弹出三次MessageBox;
……依次类推

设置断点调试了一下,发现:
点第一次登录按钮,client_GetUserCompleted调用一次;
点第二次登录按钮,client_GetUserCompleted会调用两次;
点第一次登录按钮,client_GetUserCompleted会调用三次;
……依次类推

这是怎么回事啊???

我是不弄清楚睡不了觉斯基,请各位帮帮啊!!!
仅有的35分全上了。
[解决办法]
没有仔细看你的代码,这个可以凭经验猜一下,最简单地做法(不一定优雅)是可以写
client.GetUserCompleted -= client_GetUserCompleted;
client.GetUserCompleted += client_GetUserCompleted;

热点排行