Как сделать асинхронный вызов веб-службы в C #? - PullRequest
0 голосов
/ 16 ноября 2009

Это о запутанном кластере XHR и WebMethod (asmx). Шаблон прост, я делаю вызовы через XHR в Webmethod, но кажется, что WebMethod синхронизированы, а не асинхронны. Мне просто нужно сделать этот переход асинхронным. Я ищу и ищу (может быть, не очень хорошо в поиске), но не смог найти ничего, что могло бы разрешить эту загадку.

Вот как я звоню через XHR:

$.ajax = {
    pool: [],
    call: function(settings, onSuccess, onFailure) {
        var xhr = new XMLHttpRequest();
        xhr.open(settings.type, settings.location, settings.async);
        xhr.onreadystatechange = function() {
            if (xhr.readyState == 4) {
                if (xhr.status == 200) {
                    var result = xhr.responseXML.xml.toString();
                    onSuccess($.Encoder.htmlDecode(result));
            }
        };
        $.ajax.pool.push(xhr);
        xhr.send(null);
        return xhr;
    }
}

Тогда:

$.ajax.call({ type: "get", location: "Index.asmx/RaiseCallbackEvent?eventArgument=ramiz.uddin" , async: true }, function(e) {}, function(e){})

Веб-сервис также довольно прост:

    [WebMethod(EnableSession = true)]
    [ScriptMethod(UseHttpGet = true)]
    public string RaiseCallbackEvent(string eventArgument)
    {
      // some logic
      return "<say>hello</say>";
    }

И некоторые записи web.config, которые разрешают вызовы POST, GET:

    <webServices>
      <protocols>
        <add name="HttpSoap"/>
        <add name="HttpPost"/>
        <add name="HttpGet"/>
      </protocols>
    </webServices>

Не могли бы вы подсказать, что мне делать для асинхронного?

Спасибо.

1 Ответ

0 голосов
/ 16 ноября 2009

Бьюсь об заклад, вы найдете много примеров в Google, но для фона, если вы видите, что есть функции, перечисленные как Begin [YourWebMethodName] и End [YourWebMethodName]. Begin ... вызывается при асинхронном вызове, в котором мы должны передать метод, который вызывается после завершения асинхронного вызова, и в этом методе помимо другой обработки вам нужно вызвать End [YourWebMethodName]

некоторый код ......

AsyncCallback ACB = new AsyncCallback(MyCallbackMethod);

   // Issue an asynchronous call<br>

   mywebsvc.BeginMyWebMethod1(name, ACB, mywebsvc);

   // Forget and Continue further



//This is the function known as callback function <br>
public void MyCallbackMethod(IAsyncResult asyncResult)
{
      MyWebService mywebsvc = 
  (MyWebService)asyncResult.AsyncState;

      result = webServ.EndMyWebMethod1(asyncResult);

      //use the result


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...