C# 无序调用web服务

C# 无序调用web服务,c#,javascript,web-services,C#,Javascript,Web Services,我有一个java脚本,看起来像 var message2 = ""; Commission.prototype.communityChanged = function() { BT.WebServices.InternalServices.Commission_CheckUnprocessed(function (data) {message2 = data; }, this.callFailed); if (message2 == "0") { alert("

我有一个java脚本,看起来像

var message2 = "";
Commission.prototype.communityChanged = function() {
    BT.WebServices.InternalServices.Commission_CheckUnprocessed(function (data) {message2 = data; }, this.callFailed);

    if (message2 == "0") {
        alert("0");
    }
}
[WebMethod(EnableSession=true)]
public string Commission_CheckUnprocessed() {
    return "0";
}
这调用了我的服务器端web服务。很简单

Web服务代码看起来像

var message2 = "";
Commission.prototype.communityChanged = function() {
    BT.WebServices.InternalServices.Commission_CheckUnprocessed(function (data) {message2 = data; }, this.callFailed);

    if (message2 == "0") {
        alert("0");
    }
}
[WebMethod(EnableSession=true)]
public string Commission_CheckUnprocessed() {
    return "0";
}
问题是javascript代码完成后,会调用web服务。发生故障的因此,我的message2从未被分配正确的值

我需要添加什么才能使其按正确的顺序运行?

您的functiondata是一个回调函数,这意味着它将在请求完成时执行。如果您有.NET背景,您可以将其视为事件或委托。这意味着functiondata不是按顺序执行的

我建议您阅读这篇文章,以了解正在发生的事情


据我所知,在BT.WebServices.InternalServices.Commission_CheckUnprocessed中,有一个对您的服务的调用,该方法采用两个参数:success callback和fail callback

因此,如果对Commission_CheckUnprocessed内部服务的调用是未处理的,那么下面的代码将等待它结束。在这种情况下,您的代码是正确的,但不是用户友好的,因为您在请求期间阻塞了UI

如果对服务的调用是异步的,那么您应该在回调中执行任何操作,因此您的代码应该如下所示:

Commission.prototype.communityChanged = function() {
    BT.WebServices.InternalServices.Commission_CheckUnprocessed(function (data) {
        if (data === "0") {
            alert("0");
        }
    }, this.callFailed);
}

阅读更多关于为什么应该选择异步方式的信息,或者

在函数数据{/*您的代码*/}中返回web服务后编写您想要执行的代码