【问题标题】:Using CefSharp's ResourceHandlerFactory with SignalR/WebSockets将 CefSharp 的 ResourceHandlerFactory 与 SignalR/WebSockets 一起使用
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 太好了,谢谢!我编辑了我的问题以包含我使用的一些代码。
猜你喜欢
  • 1970-01-01
  • 2016-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-27
  • 1970-01-01
  • 1970-01-01
  • 2012-03-20
相关资源
最近更新 更多