【发布时间】: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