将 CefSharp 的 ResourceHandlerFactory 与 SignalR/WebSockets 一起使用

Using CefSharp's ResourceHandlerFactory with SignalR/WebSockets

我正在按照 的答案中的说明进行操作,其中显示了如何使用 ResourceHandlerFactory 配置 CefSharp 以避免使用标准 OS 网络堆栈:

var browser = new ChromiumWebBrowser("<html file here>")
{
     ResourceHandlerFactory = myResourceHandlerFactory, //implements IResourceHandlerFactory                
};

这适用于静态文件,但我无法处理来自 SignalR 的 WebSocket 请求。客户端发送这些请求,但它们从未出现在我的 IResourceHandlerFactoryGetResourceHandler 方法中,该方法接受所有其他请求。

如何像这样处理来自 CefSharp 内存中的 WebSocket 请求?

编辑解决方案: 使用 amaitland 的建议,我能够实施 ISchemeHandlerFactory 来拦截 WebSocket 请求。我的 Cef 初始化现在看起来像这样:

var settings = new CefSettings();
settings.RegisterScheme(new CefCustomScheme { SchemeName = "ws", SchemeHandlerFactory = new OwinSchemeHandlerFactory() });
Cef.Initialize(settings);

...而我的 OwinSchemeHandlerFactory 只是实现 returns 和 IResourceHandler 的 Create 方法:

public IResourceHandler Create(IBrowser browser, IFrame frame, string schemeName, IRequest request)
{
    // return myResourceHandlerFactory.GetResourceHandler();
}

如果您使用 ISchemeHandlerFactory,您可以注册一个方案来拦截 ws and/or wss 方案。