使用 CefSharp 的 ResourceHandlerFactory 和 SignalR/WebSockets

本文关键字:SignalR WebSockets ResourceHandlerFactory CefSharp 使用 | 更新日期: 2023-09-27 18:35:28

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

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只是实现了返回IResourceHandler的Create方法:

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

使用 CefSharp 的 ResourceHandlerFactory 和 SignalR/WebSockets

如果使用ISchemeHandlerFactory则可以注册方案来拦截ws和/或wss方案。