从 fiddler 或 Swift 而不是 js 调用 signalr
call signalr from fiddler or Swift instead of js
有没有办法在 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>: ' + 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 除外)访问它
有人试过吗!?
我可以在 Fiddler 中复制您想做的事情。将它插入你的小提琴手。确实触发了断点
http://localhost/HubSample/signalr/send?transport=serverSentEvents&connectionToken=Ez8n0rVK%2Bw%2F90yiLke%2Fv0jNiVkUi0fbJfNB3oLfhPb1QZqS5zrwZ6jY1kLGU0AISolwmjROEpxkgz0Otj72%2Bkjh8OgsE9KXZUybGPENX9rfQgK2y8IrFsveKpl7C75Wm&connectionData=%5B%7B%22name%22%3A%22chathub%22%7D%5D
数据={"H":"chathub","M":"Send","A":["joe","2"],"I" :1}
该错误表示您遇到以下问题之一:
- 无法从您的设备访问您的服务器 http://abc。
- 您已将 SwiftR 配置为期望 SignalR 版本 2.2.0,但您实际上 运行 其他版本,例如 2.0.0。
- 您正在将 SwiftR 与 WKWebView 结合使用,但您尚未在服务器上启用 CORS。
更新到 SwiftR 版本 0.11.0,您会看到更好的错误消息。
有没有办法在 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>: ' + 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 除外)访问它
有人试过吗!?
我可以在 Fiddler 中复制您想做的事情。将它插入你的小提琴手。确实触发了断点
http://localhost/HubSample/signalr/send?transport=serverSentEvents&connectionToken=Ez8n0rVK%2Bw%2F90yiLke%2Fv0jNiVkUi0fbJfNB3oLfhPb1QZqS5zrwZ6jY1kLGU0AISolwmjROEpxkgz0Otj72%2Bkjh8OgsE9KXZUybGPENX9rfQgK2y8IrFsveKpl7C75Wm&connectionData=%5B%7B%22name%22%3A%22chathub%22%7D%5D 数据={"H":"chathub","M":"Send","A":["joe","2"],"I" :1}
该错误表示您遇到以下问题之一:
- 无法从您的设备访问您的服务器 http://abc。
- 您已将 SwiftR 配置为期望 SignalR 版本 2.2.0,但您实际上 运行 其他版本,例如 2.0.0。
- 您正在将 SwiftR 与 WKWebView 结合使用,但您尚未在服务器上启用 CORS。
更新到 SwiftR 版本 0.11.0,您会看到更好的错误消息。