SignalR 2.0 - 无需代理即可访问集线器

时间:2014-05-29 16:46:28

标签: javascript asp.net proxy signalr

使用以下html / js代码,如果html / js和hub驻留在同一台服务器上,我可以成功调用signalR 2.0 hub。

<!DOCTYPE html>
<html>
<head>
<title>Test SignalR 2.0</title>
<style type="text/css">
    .container {
        background-color: #99CCFF;
        border: thick solid #808080;
        padding: 20px;
        margin: 20px;
    }
</style>
</head>
<body>
<div class="container">
    <input type="text" size=100 id="message" />
    <input type="button" id="sendmessage" value="Send" />
</div>
<ul id="discussion"></ul>
<!--Script references. -->
<script src="Scripts/jquery-1.6.4.min.js"></script>
<script src="Scripts/jquery.signalR-2.0.3.min.js"></script>
<script src="/signalr/hubs"></script>

<script type="text/javascript">
    $(function () {
        //Instanciating Hub-Class
        var srv = $.connection.pvHub;

        // Definition of function called by HUB (Server)
        srv.client.receiveData = function (message) {
            var encodedMsg = $('<div />').text(message).html();
            $('#discussion').append('<ul>' + encodedMsg + '</ul><br>');
        };

        // Start the connection.
        $.connection.hub.start().done(function () {
            $('#sendmessage').click(function () {
                // call HUB function (on Server)
                srv.server.getBnoData($('#message').val());
                // Clear text box and reset focus for next comment.
                $('#message').val('').focus();
            });

        });
    });
</script>

现在我尝试使用位于客户端上的相同html / js文件调用集线器。但没有成功。 我认为,在实例化连接并启动它时,集线器代理和我的集线器的URL存在一些问题。但严格来说,不知道如何解决这个问题。

有什么想法吗?

THX。

1 个答案:

答案 0 :(得分:3)

您只需启用跨域支持即可。阅读本文:

http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-javascript-client#crossdomain

此外,如果您已经进行了设置,则必须通过将/signalr/hubs相对地址更新为绝对地址并指定有效的绝对地址来更新客户端代码以指向正确的端点为$.connection.hub.url。类似的东西:

<script src="http://foo.com/signalr/hubs"></script>
<script>

    ...
    $.connection.hub.url = 'http://foo.com/signalr';
    ...

</script>