读书人

【】Silverlight中调用WebService有关

发布时间: 2014-01-01 18:12:08 作者: rapoo

【求救】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;

读书人网 >Web Service

热点推荐