【求救】Silverlight中调用WebService问题

redfield123 2013-12-28 04:39:24
最近学习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分全上了。
...全文
297 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
redfield123 2013-12-30
  • 打赏
  • 举报
回复
晕死,这么简单明显的错误,我犯2了。 我把client.GetUserCompleted += client_GetUserCompleted;直接放构造函数里了,就没问题了。
  • 打赏
  • 举报
回复
没有仔细看你的代码,这个可以凭经验猜一下,最简单地做法(不一定优雅)是可以写
client.GetUserCompleted -= client_GetUserCompleted;
client.GetUserCompleted += client_GetUserCompleted;

12,162

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 Web Services
社区管理员
  • Web Services社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧