c# - SignalR IOS 客户端,Web 套接字传输无法从服务器调用方法

标签 c# objective-c websocket signalr

我正在使用 SignalR-ObjC Client 在我的 IOS 应用程序和 .Net 服务器之间提供通信。

我可以连接长拉并从自托管跨域服务器调用方法而不会出现任何错误。但是由于我的应用程序需要,我必须使用 WebSocket。我有一个像这样的单例经理:

@implementation SignalRManager
static int reconnectingTry;
+ (id)sharedManager {
    static SignalRManager *sharedHttpManager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedHttpManager = [[self alloc] init];
        sharedHttpManager.hubConnection = [SRHubConnection connectionWithURL:@"http://xxx:8080/signalr"];
        sharedHttpManager.proxy = [sharedHttpManager.hubConnection createHubProxy:@"myhub"];
    });

    return sharedHttpManager;
}
+(SRHubProxy *)proxy
{
    return [[SignalRManager sharedManager] proxy];
}

+(SRHubConnection *)connection
{
    return [[SignalRManager sharedManager] hubConnection];
}

+(void)start
{
    SRWebSocketTransport *transport = [[SRWebSocketTransport alloc] init];

    [[SignalRManager connection] start:transport];

}
+(void)stop
{
    [[SignalRManager connection] stop];
}

我正在调用:

 [[SignalRManager proxy] invoke:@"Hello" withArgs:[NSArray array]];

我建立了连接并且服务器可以调用客户端方法,但是当我尝试从客户端调用方法到服务器时,出现“请求失败:错误请求(400)”错误。

最佳答案

似乎是 SRWebSocketTransport 中的协议(protocol) (SRClientTransportInterface) 实现有问题。

实际上是:

- (void)send:(id <SRConnectionInterface>)connection data:(NSString *)data completionHandler:(void (^)(id response, NSError *error))block;

必须是

- (void)send:(id <SRConnectionInterface>)connection data:(NSString *)data connectionData:(NSString *)connectionData completionHandler:(void (^)(id response, NSError *error))block; 

就像子类没有调用父类(super class) (SRHttpBasedTransport) 方法的实现一样,因此您得到“请求失败:错误请求 (400)”(是另一个 http 请求,而不是 websocket)。

要修复,只需在您的 Pods 项目中打开文件 SRWebSocketTransport.m 并更改实现,如下所示:

- (void)send:(id<SRConnectionInterface>)connection data:(NSString *)data connectionData:(NSString *)connectionData completionHandler:(void (^)(id response, NSError *error))block {
    [_webSocket send:data];

    if(block) {
        block(nil,nil);
    }
}

希望这对您有所帮助。

pd: 只是检查 github 似乎在 feature-2.0.0.beta1 分支中修复

关于c# - SignalR IOS 客户端,Web 套接字传输无法从服务器调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23990998/

相关文章:

ruby-on-rails - 如何通过Rails实现基于websocket的推送服务?

c# - 使用 Microsoft 认知语音 API 和非麦克风实时音频流进行语音识别

iphone - 按升序对 NSDictionary 进行排序

php - 无法使用 wss 连接到 websocket ://in php

objective-c - 用户滚动时如何使右侧/腿部的图像居中

ios - AnnotationView 在 calloutVIew 上重叠

android - native Android 应用程序上的 Tyrus websocket 客户端在通过 WSS 从 websocket 服务器接收超过 16KB 的二进制消息时异常关闭

c# - 多层次数据模板

c# - 在 DataGrid 中突出显示 SelectedItem 的行

c# - 多人纸牌游戏的游戏架构和设计策略