【问题标题】:Calling a C# webservice from the Success function of another Webservice?从另一个 Web 服务的 Success 函数调用 C# Web 服务?
【发布时间】:2016-11-02 13:28:34
【问题描述】:

我的问题很简单。您可以从另一个 Web 服务的 Success 函数调用 C# Web 服务吗?我认为答案是否定的。

我有一个登录 web 服务,当用户尝试执行需要用户登录的操作时调用它。然后它会调用另一个 web 服务,当操作完成时它不会进入 onSuccess 函数。我假设它不能这样做?这是正确的吗?

示例代码,不是实际代码。

webservice.login(onLoginSuccess)

function onLoginSuccess(){

    webservice.doSomething(onDoSomethingSuccess)

}

function onDoSomethingSuccess(){

    .... does not get here.

}

这是它的基本代码。

客户端 JavaScript 调用,登录 web 服务成功。

function onLoginSuccess(result){


    negotiateWithUser(true,
                      activeUser.id,
                      negotiation.dateID,
                      activeUser.showChat,
                      true);
}


function negotiateWithUser() {

    <code>

    if (justLoggedIn) updateDateData();

    <code>
}

 function updateDateData(){
     if (populate==false){

         populate=true;       
        WebService.Negotiations.DatesGet(activeUser.id,SucceededtoCallbackDateRefresh, ErrorHandler);          
     }
}

即使返回数据并且没有错误,也不进入函数 SucceededtoCallbackDateRefresh。

我想我知道问题是什么,在negotiateWithUser函数中调用了updateDateData,执行控制权被交还给了negotiateWithUser函数,而不是进入SucceededtoCallbackDateRefresh成功函数,因为它是一个异步调用。我认为需要某种回调函数。

我已经通过在 onLoginSuccess 函数的 setInterval() 中调用 updataDateData 函数来解决这个问题。

 function onLoginSuccess(result){ 

      if (negotiate) {              
           timerInterval = setInterval("updateDateData()", 300);
      }

 }

它有效。如果有人有更优雅的方法,我会很感兴趣。
谢谢。

【问题讨论】:

  • 可以。这并不一定是个好主意。小心行事:)
  • 谢谢大卫,但它似乎对我不起作用。
  • 嗯,你提到这不是你的实际代码,所以我没有太具体地评论它。如果它不起作用,我建议的第一件事是确保您对服务的引用是正确的 - 如果您发布了更具代表性的 sn-p 可能会有所帮助。
  • “它似乎对我不起作用”可以使用更多细节、显示错误、更多代码等...
  • 这个问题有点令人困惑,尤其是。因为你已经标记了 JavaScript。服务到服务调用在 C# 中很好。如果您的代码出现问题,最好发布实际代码以便我们提供帮助。

标签: javascript c# asp.net web-services


【解决方案1】:

jQuery.ajax() 怎么用?

 function Func1() {
    $.ajax({
        url:'MyWebService.asmx/Func1',
        success:Func1Success,
        error: function () {
            alert('there was an error!');
        },
    });
    return false;
}
function Func1Success(output){
  $.ajax({
        url:'MyWebService.asmx/Func2',
        success:Func1SuccessToSuccess,
        error: function () {
            alert('there was an error!');
        },
    });
}
function Func1SuccessToSuccess() {
    return false;
}

【讨论】:

    【解决方案2】:

    你绝对可以。

    理论上只是给个建议/建议,第一个Web服务方法的状态响应可以有1个局部变量,可以是布尔值,代表第一次调用成功。然后,如果您的本地变量符合您的成功条件,则可以依次调用其他 Web 服务方法。

    我提供的只是一个想法,对于更具体的答案,我建议您发布您正在处理的实际代码。

    谢谢。

    【讨论】:

      【解决方案3】:

      我假设您在服务器上使用 .cs 文件,然后从 android 调用它们。 如果这是您正在做的事情,那么有一种方法可以在另一种方法成功时调用方法。只需让两个 .cs 文件说 x 和 y 并将其存储在您的服务器上。然后从 android (x) 调用其中一个,然后在 x 中创建 y 的对象,这就是全部。 例如。这是我从 android 调用的一个名为 abc.cs 的 .cs 文件。

       [WebMethod]
       public xyz IsLoggedIn()
       {
          xyz example = new xyz();
          //do something
          .
          .
      
          return example;
        }
      

      现在 xyz.cs 将是:

      [WebMethod]
       public void onSuccessofIsLoggedIn()
       {
          //do something
          .
          .
        }
      

      我希望这会有所帮助....尽管所有这些都只是基于假设...请清楚您使用的是什么,我们的答案也会更加清楚。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-27
        • 2011-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-03
        相关资源
        最近更新 更多