2016-01-06 2 views
0

Из-за потенциальных ограничений брандмауэра и необходимости иметь много экземпляров моего приложения, которое не может конкурировать за порты, я хотел бы использовать класс Microsoft.Owin.Testing.TestServer для создания встроенной памяти веб-сервер, который будет обслуживать запросы к встроенному браузеру CefSharp (либо WPF, либо Winforms в порядке).Использование CefSharp с Owin TestServer

Я могу создать TestServer без проблем. Как настроить элемент управления CefSharp WebBrowser для использования этого тестового сервера вместо использования стандартного сетевого стека ОС?

Если бы я формировал свои собственные запросы, я бы либо использовал HttpClient, предоставленный TestServer, либо создавал новый HttpClient, используя обработчик TestServer. Есть ли эквивалентная функциональность в CefSharp WebBrowser?

ответ

0

Вы можете перехватывать запросы и выполнять их самостоятельно. Если вы реализуете IResourceHandlerFactory впоследствии IResourceHandler (Просто возвращает новый экземпляр пользовательских IResourceHandler в IResourceHandlerFactory.GetResourceHandler)

https://github.com/cefsharp/CefSharp/blob/cefsharp/45/CefSharp/IResourceHandlerFactory.cs#L22

Новый экземпляр пользовательских ResourceHandler будет экземпляр для каждого запроса. Относительно просто обработать запрос в модуле async, просто вызовите свой запрос в ProcessRequestAsync, когда он заполнит локальный поток с выполнением данных callback.Continue(), верните поток и заполните ответ в GetResponse. Мне нравится обернуть callback в операторе using, поскольку он обертывает управляемый ресурс и должен быть явно удален.

Вы можете увидеть простой пример на https://github.com/cefsharp/CefSharp/blob/cefsharp/45/CefSharp.Example/CefSharpSchemeHandler.cs#L92 (Не делает сетевых запросов, основным является то же самое, хотя)

+0

Это прекрасно работает, спасибо. Быстрая заметка для всех, кто читает это. Просто не забудьте присвоить экземпляр нового ресурса ResourceHandlerFactory свойству ResourceHandlerFactory элемента управления WebBrowser. Если вы используете WPF, это, скорее всего, будет в конструкторе вашего кода XAML позади или потенциально в поведении. –

+0

Основной рабочий пример https://github.com/amaitland/CefSharp.Owin/blob/master/CefSharp.Owin/OwinResourceHandler.cs Полное раскрытие информации в первый раз с OWIN, поэтому приветствуем обратную связь. – amaitland

Смежные вопросы