使用 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 请求。客户端发送这些请求,但它们从未出现在我的IResourceHandlerFactory
的GetResourceHandler
方法中,该方法接受所有其他请求。
如何像这样处理来自 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();
}
如果使用ISchemeHandlerFactory
则可以注册方案来拦截ws
和/或wss
方案。