2015-03-22 2 views
3

Я работаю на веб-сайте ASP.NET 5 (ASP.NET vNext). Я использую SignalR server (1.0 Beta 3) для некоторой обработки. Он правильно настроен, потому что я могу успешно вызывать методы сервера из клиента браузера Javascript.ASP.NET 5 SignalR не работает с .NET-клиентом

Но когда я использую .NET-клиент (.NET 4.5 с SignalR 2.2.0), метод invoke fail с общей «ошибкой 500».

Я загрузил оба сервера SignalR и источники клиентов, чтобы иметь возможность их отлаживать. Я видел, что клиентский метод вызывается с действительным параметром «postData», но у сервера PersistentConnectionMiddleware.Invoke() метод имеет контекст http без значения «Form» внутри запроса. И это приводит к сбою на стороне сервера SignalR в методе ForeverTransport.ProcessSendRequest().

Форма сообщения, кажется, забыта во время передачи между клиентом и сервером (я использую сервер IIS Express по умолчанию).

Любая идея? Спасибо ...

ответ

0

Я увидел issue, который вы открыли и совершили исправление/обходное решение.

В настоящий момент это не похоже на то, что SignalR 3 работает с клиентом в связи с тем, что он ожидает, что все запросы будут закодированы в форме. workaround должен обновить ProcessSendRequest(), чтобы он мог получать неформатно-кодированные данные из клиента .NET .NET;

protected virtual async Task ProcessSendRequest() 
{ 
    var data = await GetData().PreserveCulture(); 

    if (Received != null) 
    { 
     await Received(data).PreserveCulture(); 
    } 
} 

private async Task<string> GetData() 
{ 
    if (Context.Request.HasFormContentType) 
    { 
     var form = await Context.Request.ReadFormAsync().PreserveCulture(); 
     return form["data"]; 
    } 
    else 
    { 
     var stream = new System.IO.StreamReader(Context.Request.Body); 
     var output = await stream.ReadToEndAsync().PreserveCulture(); 
     var decoded = UrlDecoder.UrlDecode(output); 
     return decoded.Replace("data=", ""); 
    } 
} 
Смежные вопросы