使用后台运行的WebService登录



我有一个验证用户的WebService。但在收到验证之前,Windows会指责该程序没有响应。我尝试过线程、异步,但都没有成功。当他连接到网络服务时,屏幕上会显示一条连接消息。

label1.Text = "Connecting";
Service.Service1 ws = new Service.Service1(); //start WebService
bool login = ws.login(username, password); //Validate login
if (login) {... //If login is true

我试过线程,

你还没有真正展示你所尝试的,所以很难判断你的代码可能出了什么问题。如果这是一个桌面应用程序,您可以考虑使用BackgroundWorker

例如:

private void LoginButtonClick(object sender, EventArgs e)
{
    label1.Text = "Connecting";
    var bw = new BackgroundWorker();
    bw.DoWork += Login;
    bw.RunWorkerCompleted += LoginCompleted;
    bw.RunWorkerAsync();
}
private void Login(object sender, DoWorkEventArgs e)
{
    Service.Service1 ws = new Service.Service1();
    bool success = = ws.login(username, password);
    e.Result = success;
}
private LoginCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    bool success = (bool)e.Result;
    if (success)
    {
        label1.Text = "You have successfully logged in";
    }
    else
    {
        label1.Text = "Wrong username and password";
    }
}

在桌面应用程序中使用后台线程时也要小心。您应该确保您永远不会访问此后台线程中的UI控件。这应该始终在主UI线程上完成。

Service1.Service有"Beginlogin"/"Endlogin"方法吗?通常,当您添加对WSDL的引用时,也会自动为您创建此异步版本。。。。

如果是,则使用此方法;这比单独纺纱要干净得多。看见http://www.codeproject.com/Articles/2476/Asynchronous-Communication-with-NET-WebServices以获得如何使用它们的好例子。

最新更新