2016-02-19 7 views
0

Я следуя инструкциям в ответ на 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(); 
} 
+0

Работает ли он для общих запросов? Предположим, вам придется использовать 'ISchemeHandlerFactory' и зарегистрироваться для схем' ws' и/или 'wss'. Для примера см. Основной проект «CefSharp». – amaitland

+0

@amaitland: Спасибо, что указал мне в правильном направлении - это именно то, что я искал. Теперь я могу перехватывать запросы WebSocket, используя ISchemeHandlerFactory. (Я не уверен, что это лучший способ сделать это, но если вы опубликуете свой комментарий в качестве ответа, я могу отметить его как принятый ответ.) –

+0

Выполнено, не стесняйтесь предлагать какие-либо изменения, которые, по вашему мнению, актуальны. – amaitland

ответ

1

Если вы используете ISchemeHandlerFactory вы можете зарегистрировать схему для перехвата схемы ws и/или wss.

+0

Отлично, спасибо! Я отредактировал мой вопрос, чтобы включить некоторые из кода, который я использовал. –