无法在第一次尝试时从WCF服务获取来自ajax函数调用的数据

时间:2016-05-03 14:04:32

标签: asp.net wcf webmethod

[WebMethod]
public static string LoadAccount()
{
    address = new EndpointAddress(objClientSession.ServiceURL);
    proxy = new PMToolServices.MyAppServiceClient(binding, address);

    //Now call the web service to get the accounts
    proxy.wsGetAccountsCompleted += new EventHandler<MyAppServices.wsGetAccountsCompletedEventArgs>(proxy_wsGetAccountsCompleted);
    proxy.wsGetAccountsAsync();
    return strAccountList;
}

我使用LoadAccount呼叫ajax WebMethod。在LoadAccount我已将回调proxy_wsGetAccountsCompleted添加到WCF的wsGetAccounts。在proxy_wsGetAccountsCompleted我正在构建结果以返回LoadAccount。 的问题:

  • 我无法直接从'proxy_wsGetAccountsCompleted'返回结果,因此我将该结果存储在全局定义的字符串中,然后在LoadAccout WebMethod的末尾返回该结果。我可以直接从proxy_wsGetAccountsCompleted返回。

  • 当我第一次调用LoadAccount WebMethod时它返回空白结果,如果我第二次再次调用,那么我得到正确的结果。即使作为序列,我在它之上proxy_wsGetAccountsCompleted之后返回全局定义的字符串。是吗?

对以下之间的序列/返回响应感到困惑:

  • proxy.wsGetAccountsAsync();
  • proxy_wsGetAccountsCompleted();
  • return strAccountList

1 个答案:

答案 0 :(得分:1)

你正在做一些奇怪的事情:调用同步的wcf操作,调用异步操作。当然第一次它不会起作用。

LoadAccount()在获取wsGetAccountsAsync()结果之前返回。您可以同步调用wsGetAccountsAsync或使用异步操作,例如使用Signal R.。

请记住,当第二次调用操作时,您将获得先前请求的结果,如果您的方法接受某个参数,您将存储错误的值,即您之前请求的响应。