[英]SignalR wpf server and ASP.NET MVC issue
我在WPF SignalR服务器中
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());
}
}
启动文件
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();
}]);
})()
客户端位于IIS Express上的http:// localhost:8081
更新:协商请求期间出错
在这部分代码中
using (WebApp.Start(options))
{
}
您创建然后立即处置服务器对象。 这意味着您在创建后立即关闭服务器。
您应该存储对该对象的引用,并在需要时调用dispose。 或者只是存储对象,让OS在进程退出时处理资源清理。
相关部分:
返回值
类型:System.IDisposable
一个IDisposible实例,可以调用它来关闭Web应用程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.