从 Mac 中的 ios 客户端调用 PC 中的 signalR 服务器

Posted

技术标签:

【中文标题】从 Mac 中的 ios 客户端调用 PC 中的 signalR 服务器【英文标题】:call signalR server in PC from ios client in Mac 【发布时间】:2016-05-18 23:52:46 【问题描述】:

我得到了这个服务器代码表单here 和这个客户端来自同一作者here

所以 .Net signalR 服务器在 PC 上运行。 signalR 在控制台应用程序中自托管。客户端是在我的 iMac 中用 Swift 编写的 ios 客户端。我正在尝试在 Mac 中制作代码以查看 PC 中的代码。 我发现的所有示例都是关于从同一服务器调用信号器,这没有帮助。我的服务器网址是:http://locahost:8080,而我电脑上的 signalR 是这样的:

class MainClass

    public static void Main(string[] args)
    
        // 127.0.0.1 myserver.com in /etc/hosts
        // Or change myserver.com to localhost
        // Using myserver.com instead of localhost to capture requests in Charles Proxy
        string url = "http://localhost:8080";
        using (WebApp.Start (url)) 
            Console.WriteLine ("Server running on 0", url);
            Console.ReadLine ();
        
    

这是我要尝试的方法('abc' 是我的服务器名称):

// Simple example...
[CustomAuthorize]
public class SimpleHub : Hub

    public void SendSimple(string message, string detail)
    
        var clients = Clients.All;
        Clients.All.notifySimple (message, detail);
    

现在的目标是真正从 iMac 中的 ios 客户端实现它:

override func viewDidLoad() 
    super.viewDidLoad()

    // Make sure myserver.com is mapped to 127.0.0.1 in /etc/hosts
    // Or change myserver.com to localhost or IP below

    // Default is false
    SwiftR.useWKWebView = true

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

    // Hubs...
    hubConnection = SwiftR.connect("http://abc:8080")  [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("notifySimple")  args in
            let message = args![0] as! String
            let detail = args![1] as! String
            print("Message: \(message)\nDetail: \(detail)\n")
        

但是当我尝试启动连接时,我在 Swift 中收到此错误:

SwiftR 无法处理消息 4eg2u0fw:错误域 = WKErrorDomain Code=5 "javascript 执行返回了不支持类型的结果" UserInfo=NSLocalizedDescription=JavaScript 执行返回一个 类型不受支持的结果 已断开连接。

知道如何解决这个问题吗!?

【问题讨论】:

【参考方案1】:

我已经改变方向并使用此信号代码进行探索:Tutorial: Getting Started with SignalR 2。我将它托管在 azure 中,并且能够从 Swift 中的 WKWebView 代码中调用它。检查我的线程。他们在那里有大量的代码。

【讨论】:

请注意,该教程中的代码使用 SignalR 2.0.0。默认情况下,除非另有配置,否则 SwiftR 当前需要 2.2.0。

以上是关于从 Mac 中的 ios 客户端调用 PC 中的 signalR 服务器的主要内容,如果未能解决你的问题,请参考以下文章

我想要一个通过 USB 与 PC/MAC 中的另一个应用程序通信的 iOS 应用程序

如何允许同一局域网(PC / Mac /移动设备)中的其他机器从我们的Electron应用程序下载?

将图像从客户端 pc 又名 Oracle 中的 Java 函数复制到 BLOB

从 Cordova iOS 中的委托返回数据

从 Svelte Kit 中的加载函数调用 prisma 客户端

报警软件:兼容 iOS、Android、Mac、PC [关闭]