将 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 请求。客户端发送这些请求,但它们从未出现在我的 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 只是实现 returns 和 IResourceHandler
的 Create 方法:
public IResourceHandler Create(IBrowser browser, IFrame frame, string schemeName, IRequest request)
{
// return myResourceHandlerFactory.GetResourceHandler();
}
如果您使用 ISchemeHandlerFactory
,您可以注册一个方案来拦截 ws
and/or wss
方案。
我正在按照
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 只是实现 returns 和 IResourceHandler
的 Create 方法:
public IResourceHandler Create(IBrowser browser, IFrame frame, string schemeName, IRequest request)
{
// return myResourceHandlerFactory.GetResourceHandler();
}
如果您使用 ISchemeHandlerFactory
,您可以注册一个方案来拦截 ws
and/or wss
方案。