SignalR Ошибка асинхронной операции

Я использую SignalR 1.1.2, и у меня проблема с методом async hub. Все работает отлично на моем ПК с транспортом ForeverFrame, но после развертывания на сервере и перехода на перенос веб-сокетов я получаю следующую ошибку:

Асинхронная операция не может быть запущена в это время. Асинхронные операции могут запускаться только в асинхронном обработчике или модуле или во время определенных событий в жизненном цикле страницы. Если это исключение произошло при выполнении страницы, убедитесь, что страница отмечена <% @Page Async = "true" % > .

Мой код метода хаба:

public async Task<string> getUrl()
    {
        var url = await MyWebservice.GetMyRoomUrlAsync(Context.User.Identity.Name);

        return url;
    }

Поддерживаются ли асинхронные методы в SignalR с переносом веб-сокетов?

Обновление: Код GetMyRoomUrlAsync:

public static Task<string> GetMyRoomUrlAsync(string email)
    {
        var tcs = new TaskCompletionSource<string>();

        var client = new Onif40.VisualStudioGeneratedSoapClient();

        client.GetRoomUrlCompleted += (s, e) =>
        {
            if (e.Error != null)
                tcs.TrySetException(e.Error);
            else if (e.Cancelled)
                tcs.TrySetCanceled();
            else
                tcs.TrySetResult(e.Result);
        };

        client.GetRoomUrlAsync(email);

        return tcs.Task;
    }

После того, как Стивен Клири разъяснил мне, в чем проблема, решая его, переписывая EAP в APM, было тривиально.

public static Task<string> GetMyRoomUrlAsync(string email)
    {
        var tcs = new TaskCompletionSource<string>();

        var client = new Onif40.VisualStudioGeneratedSoapClient();

        client.BeginGetRoomUrl(email, iar =>
        {
            try
            {
                tcs.TrySetResult(client.EndGetRoomUrl(iar));
            }
            catch (Exception e)
            {
                tcs.TrySetException(e);
            }
        }, null);

        return tcs.Task;
    }

Ответ 1

Поддерживаются методы

async. Однако вы не можете использовать обертки async void или async вокруг методов EAP.

Одной из распространенных причин этого является использование WebClient вместо нового HttpClient. Если это не так, вам нужно опубликовать реализацию GetMyRoomUrlAsync.