Я следуя инструкциям в ответ на this question, который показывает, как настроить CefSharp с ResourceHandlerFactory избежать, используя стандартный сетевой стек ОС:Использование ResourceHandlerFactory CefSharp с SignalR/WebSockets
var browser = new ChromiumWebBrowser("<html file here>")
{
ResourceHandlerFactory = myResourceHandlerFactory, //implements IResourceHandlerFactory
};
Это хорошо работает для статических файлов, но я не могу обрабатывать запросы WebSocket от SignalR. Клиент отправляет эти запросы, но они никогда не появляются в методе GetResourceHandler
моего IResourceHandlerFactory
, который принимает все остальные запросы.
Как я могу обрабатывать запросы WebSocket от CefSharp в памяти?
Редактировать с помощью решения: Используя предложение amaitland, я смог реализовать ISchemeHandlerFactory
для перехвата запросов WebSocket. Моя инициализация Cef теперь выглядит следующим образом:
var settings = new CefSettings();
settings.RegisterScheme(new CefCustomScheme { SchemeName = "ws", SchemeHandlerFactory = new OwinSchemeHandlerFactory() });
Cef.Initialize(settings);
... и мой OwinSchemeHandlerFactory просто реализует Создать метод, который возвращает IResourceHandler
:
public IResourceHandler Create(IBrowser browser, IFrame frame, string schemeName, IRequest request)
{
// return myResourceHandlerFactory.GetResourceHandler();
}
Работает ли он для общих запросов? Предположим, вам придется использовать 'ISchemeHandlerFactory' и зарегистрироваться для схем' ws' и/или 'wss'. Для примера см. Основной проект «CefSharp». – amaitland
@amaitland: Спасибо, что указал мне в правильном направлении - это именно то, что я искал. Теперь я могу перехватывать запросы WebSocket, используя ISchemeHandlerFactory. (Я не уверен, что это лучший способ сделать это, но если вы опубликуете свой комментарий в качестве ответа, я могу отметить его как принятый ответ.) –
Выполнено, не стесняйтесь предлагать какие-либо изменения, которые, по вашему мнению, актуальны. – amaitland