繁体   English   中英

SignalR WPF服务器和ASP.NET MVC问题

[英]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();
    }]);
})()

在Firefox中启动客户端时,出现以下错误 错误

客户端位于IIS Express上的http:// localhost:8081

更新:协商请求期间出错

在这部分代码中

 using (WebApp.Start(options))
 {
 }

您创建然后立即处置服务器对象。 这意味着您在创建后立即关闭服务器。

您应该存储对该对象的引用,并在需要时调用dispose。 或者只是存储对象,让OS在进程退出时处理资源清理。

文献资料

相关部分:

返回值

类型:System.IDisposable

一个IDisposible实例,可以调用它来关闭Web应用程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM