将 CefSharp 与 Owin TestServer 结合使用
Using CefSharp with Owin TestServer
由于潜在的防火墙限制以及我的应用程序需要有很多实例不能竞争端口,我想使用 Microsoft.Owin.Testing.TestServer class 创建一个内存中的网络将为嵌入式 CefSharp 浏览器(WPF 或 Winforms 都可以)的请求提供服务的服务器。
我可以毫无问题地创建测试服务器。如何配置 CefSharp WebBrowser 控件以使用该测试服务器而不是使用标准 OS 网络堆栈?
如果我正在形成自己的请求,我会使用 TestServer 提供的 HttpClient 或使用 TestServer 的处理程序创建一个新的 HttpClient。 CefSharp WebBrowser 中是否有任何等效功能?
您可以拦截请求并自己完成它们。如果您实施 IResourceHandlerFactory
然后随后 IResourceHandler
(只是 return 您的自定义 IResourceHandler
在 IResourceHandlerFactory.GetResourceHandler
中的一个新实例)
https://github.com/cefsharp/CefSharp/blob/cefsharp/45/CefSharp/IResourceHandlerFactory.cs#L22
您的自定义 ResourceHandler
的新实例将为每个请求实例化。以 async
方式处理请求相对简单,只需在 ProcessRequestAsync
中调用您的请求,完成后用数据填充本地流执行 callback.Continue()
,return流式传输并填充 GetResponse
中的响应。我喜欢将 callback
包装在 using
语句中,因为它包装了托管资源,应该明确处理。
你可以在https://github.com/cefsharp/CefSharp/blob/cefsharp/45/CefSharp.Example/CefSharpSchemeHandler.cs#L92看到一个基本的例子(不做网络请求,虽然原理是一样的)
由于潜在的防火墙限制以及我的应用程序需要有很多实例不能竞争端口,我想使用 Microsoft.Owin.Testing.TestServer class 创建一个内存中的网络将为嵌入式 CefSharp 浏览器(WPF 或 Winforms 都可以)的请求提供服务的服务器。
我可以毫无问题地创建测试服务器。如何配置 CefSharp WebBrowser 控件以使用该测试服务器而不是使用标准 OS 网络堆栈?
如果我正在形成自己的请求,我会使用 TestServer 提供的 HttpClient 或使用 TestServer 的处理程序创建一个新的 HttpClient。 CefSharp WebBrowser 中是否有任何等效功能?
您可以拦截请求并自己完成它们。如果您实施 IResourceHandlerFactory
然后随后 IResourceHandler
(只是 return 您的自定义 IResourceHandler
在 IResourceHandlerFactory.GetResourceHandler
中的一个新实例)
https://github.com/cefsharp/CefSharp/blob/cefsharp/45/CefSharp/IResourceHandlerFactory.cs#L22
您的自定义 ResourceHandler
的新实例将为每个请求实例化。以 async
方式处理请求相对简单,只需在 ProcessRequestAsync
中调用您的请求,完成后用数据填充本地流执行 callback.Continue()
,return流式传输并填充 GetResponse
中的响应。我喜欢将 callback
包装在 using
语句中,因为它包装了托管资源,应该明确处理。
你可以在https://github.com/cefsharp/CefSharp/blob/cefsharp/45/CefSharp.Example/CefSharpSchemeHandler.cs#L92看到一个基本的例子(不做网络请求,虽然原理是一样的)