2016-03-05 3 views
0

Я имею в WPF SignalR сервереSignalR МОФ сервер и ASP.NET MVC вопрос

public partial class MainWindow 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     Closing += (s, e) => ViewModelLocator.Cleanup(); 
     StartOptions options = new StartOptions(); 

     options.Urls.Add("http://localhost:8080"); 
     using (WebApp.Start(options)) 
     { 
     } 
    } 
} 

Hub.cs

[HubName("clientPushHub")] 
public class TestHub : Hub 
{ 
    public string GetServerTime() 
    { 
     return DateTime.UtcNow.ToString(); 
    } 

    public void Heartbeat() 
    { 
     Console.WriteLine("Hub Heartbeat\n"); 
     Clients.All.heartbeat(); 
    } 

    public Task JoinGroup(string groupId) 
    { 
     return Groups.Add(Context.ConnectionId, groupId); 
    } 

    public void addHit(string pageId) 
    { 

    } 
    public Task LeaveGroup(string groupId) 
    { 
     return Groups.Remove(Context.ConnectionId, groupId); 
    } 

    public override Task OnConnected() 
    { 
     return (base.OnConnected()); 
    } 
} 

Startup.cs

public class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     PerformanceEngine performanceEngine = new PerformanceEngine(1000); 
     Task.Factory.StartNew(async() => await performanceEngine.OnPerformanceMonitor()); 
     // map SignalR urls 
     app.Map("/signalr", map => 
     { 
      map.UseCors(CorsOptions.AllowAll); 

      var hubConfiguration = new HubConfiguration 
      { 
       EnableDetailedErrors = true 
      }; 
      map.RunSignalR(hubConfiguration); 
     } 
     ); 
    } 
} 

И в моем ASP. NET MVC клиент У меня есть Index.cshtml

<script src="~/Scripts/jquery-1.10.2.min.js"></script> 
<script src="~/Scripts/jquery.signalR-2.2.0.min.js"></script> 
<script type="text/javascript" src="~/signalr/hubs"></script> 
<script src="~/Scripts/angular.min.js"></script> 
<script src="~/Scripts/app.js"></script> 

<body ng-app="signalRIntegrationApp"> 
    <div ng-controller="ServerTimeController"> 
     <div> 
      <h3>Time from server (being pushed every 5 seconds):</h3> 
      <h4>{{currentServerTime}}</h4> 
     </div> 

     </div> 
</body> 

и app.js

(function() { 
    var app = angular.module("signalRIntegrationApp", []); 
    app.service('signalRSvc', function ($rootScope) { 
     var proxy = null; 

     var initialize = function() { 
      var connection = $.hubConnection("http://localhost:8080"); 
      proxy = connection.createHubProxy('clientPushHub'); 

      connection.start(function() { 
       proxy.addHit(); 
      }); 

      proxy.on('serverTime', function (data) { 
        $rootScope.$emit('serverTime', data); 
      }); 
     } 

     return { 
      initialize: initialize 
     }; 
    }); 

    app.controller('ServerTimeController', ["$scope", 'signalRSvc', function($scope, signalRSvc) { 
     var vm = this; 

     $scope.$on("serverTime", function (e, data) { 
      $scope.$apply(function() { 
       vm.currentServerTime = data; 
      }); 
     }); 
     signalRSvc.initialize(); 
    }]); 
})() 

При запуске клиента в Firefox я получаю ошибку на error

клиент находится на http://localhost:8081 на IIS Express

Обновление: Ошибка во время переговоров

+0

Какая ошибка (код состояния HTTP)? – Pawel

+0

Ошибка @Pawel во время запроса на переговоры – amplifier

ответ

2

В этой части кода

using (WebApp.Start(options)) 
{ 
} 

Вы создаете и немедленно удаляете объект сервера. Это означает, что вы закрываете сервер сразу после создания.

Вы должны сохранить ссылку на этот объект и позвонить в случае необходимости. Или просто сохраните объект и позвольте ОС обрабатывать очистку ресурсов, когда процесс завершается.

Documentation

Соответствующая часть:

Возвращаемое значение

Тип: System.IDisposable

IDisposible экземпляр, который может быть вызван, чтобы закрыть веб-приложение.

Смежные вопросы