javascript - 从 fiddler 或 Swift 而不是 js 调用 signalr

标签 javascript c# signalr fiddler openstack-swift

有没有办法在 Fiddler 或 Swift 中模拟这个 js 发送给信号器的内容:

$(function () {
    // Declare a proxy to reference the hub.
    var chat = $.connection.chatHub;
    // Create a function that the hub can call to broadcast messages.
    chat.client.broadcastMessage = function (name, message) {
        // Html encode display name and message.
        var encodedName = $('<div />').text(name).html();
        var encodedMsg = $('<div />').text(message).html();
        // Add the message to the page.
        $('#discussion').append('<li><strong>' + encodedName
            + '</strong>:&nbsp;&nbsp;' + encodedMsg + '</li>');
    };
    // Get the user name and store it to prepend to messages.
    $('#displayname').val(prompt('Enter your name:', ''));
    // Set initial focus to message input box.
    $('#message').focus();
    // Start the connection.
    $.connection.hub.start().done(function () {
        $('#sendmessage').click(function () {
            // Call the Send method on the hub.
            chat.server.send($('#displayname').val(), $('#message').val());
            // Clear text box and reset focus for next comment.
            $('#message').val('').focus();
        });
    });
});

该页面驻留在通过我的 iis 服务器访问的 HTML 中: http://abc/HubSample/ (abc是我的服务器名称) 这是它调用的 C# 代码:

public class ChatHub : Hub
{
    public void Send(string name, string message)
    {
        // Call the broadcastMessage method to update clients.
        Clients.All.broadcastMessage(name, message);
    }
}

我也可以从其他服务器调用该 html 页面。目标是在调用该方法时包含不同的客户端(不仅仅是 js 客户端)。

我尝试在 Swift 中这样调用它:

// Default is false
SwiftR.useWKWebView = true

// Default is .Auto
SwiftR.transport = .ServerSentEvents

// Hubs...
hubConnection = SwiftR.connect("http://abc/HubSample") { [weak self] connection in
    connection.queryString = ["foo": "bar"]
    connection.headers = ["X-MyHeader1": "Value1", "X-MyHeader2": "Value2"]

    // This only works with WKWebView on iOS >= 9
    // Otherwise, use NSUserDefaults.standardUserDefaults().registerDefaults(["UserAgent": "SwiftR iOS Demo App"])
    connection.customUserAgent = "SwiftR iOS Demo App"

    self?.simpleHub = connection.createHubProxy("simpleHub")
    self?.complexHub = connection.createHubProxy("complexHub")

    self?.simpleHub.on("broadcastMessage") { args in
        let message = args![0] as! String
        let detail = args![1] as! String
        print("Message: \(message)\nDetail: \(detail)\n")
    }

但我在 XCode 和 Safari 开发工具中不断收到此错误:

SwiftR unable to process message h0z81qhh: Error Domain=WKErrorDomain Code=5 "JavaScript execution returned a result of an unsupported type" UserInfo={NSLocalizedDescription=JavaScript execution returned a result of an unsupported type}

XMLHttpRequest cannot load http://abc/HubSample/signalr/negotiate?clientProtocol=1.5&foo=bar&connectionData=%5B%7B%22name%22%3A%22simplehub%22%7D%2C%7B%22name%22%3A%22complexhub%22%7D%5D&_=1463691894451. Origin null is not allowed by Access-Control-Allow-Origin.

从 Swift 调用它是理想的选择,但很高兴看到它可以从任何其他客户端(除了 javascript)访问

有人尝试过这样做吗!?

最佳答案

关于javascript - 从 fiddler 或 Swift 而不是 js 调用 signalr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37334097/

相关文章:

javascript - 如何使用 Node.js Selenium Chrome 驱动程序设置文件下载目录

c# - 找不到 Microsoft.Office.Interop.Excel 引用

javascript - SignalR:未捕获类型错误:无法读取未定义的属性 'chat'

c# - 我如何才能等到表单句柄创建后再使用其组件?

c# - 在我执行 ctrl+F5 之前,SignalR 在每隔一次页面刷新时中断

c# - 关于 sqlDependency 更改的 SignalR 重复消息

javascript - 单击按钮时显示框阴影的 Div

javascript - 使用 lodash 从数组中删除两个值(如果重复)

javascript - 动态调整 CKEditor 5 中粘性工具栏的位置

c# - 在字符串的第一个字符串上分割空值或空格?