【发布时间】:2016-02-19 19:04:02
【问题描述】:
我正在按照this question 的回答中的说明进行操作,该说明显示了如何使用 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 只是实现了返回 IResourceHandler 的 Create 方法:
public IResourceHandler Create(IBrowser browser, IFrame frame, string schemeName, IRequest request)
{
// return myResourceHandlerFactory.GetResourceHandler();
}
【问题讨论】:
-
它适用于一般请求吗?猜测您必须使用
ISchemeHandlerFactory并注册ws和/或wss方案。有关示例,请参阅主CefSharp项目。 -
@amaitland:感谢您为我指明了正确的方向——这正是我所寻找的。我现在可以使用 ISchemeHandlerFactory 拦截 WebSocket 请求。 (我不确定执行此操作的最佳方法,但如果您将评论作为答案发布,我可以将其标记为已接受的答案。)
-
完成,请随时提出您认为相关的任何修改。
标签: c# owin chromium-embedded katana cefsharp