'Websocket not working in CEFSharp project
I have a pretty basic cefsharp project that open a website just like a browser.
My website have some secure websocket connections those work perfectly in normal browser, but when I try to run the same website in cefsharp, it never connects to socket server.
After few seconds of Connecting it Disconnect...
I was trying to use this way Using CefSharp's ResourceHandlerFactory with SignalR/WebSockets
But the problem is, I don't want to intercept websocket request. I just want them to be able to run on the website.
Xaml Code::
<wpf:ChromiumWebBrowser x:Name="Browser" >
<behaviors:Interaction.Behaviors>
<behaviours:HoverLinkBehaviour x:Name="HoverLinkBehaviour"/>
</behaviors:Interaction.Behaviors>
</wpf:ChromiumWebBrowser>
C# Code::
// Request Handler (add cloudflare service auth token in header)
Browser.RequestHandler = new CloudflareServiceToken(
"Public Token",
"Secret Key"
);
Browser.Address = Config.HOME_URL;
My Request Handler
class CloudflareServiceTokenHandler : ResourceRequestHandler
{
public CloudflareServiceTokenHandler(string key, string secret)
{
_key = key;
_secret = secret;
}
private string _key, _secret;
protected override CefReturnValue OnBeforeResourceLoad(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback)
{
if (!string.IsNullOrEmpty(_key) && !string.IsNullOrEmpty(_secret))
{
var headers = request.Headers;
headers["CF-Access-Client-Id"] = $"{_key}";
headers["CF-Access-Client-Secret"] = $"{_secret}";
request.Headers = headers;
return CefReturnValue.Continue;
}
else return base.OnBeforeResourceLoad(chromiumWebBrowser, browser, frame, request, callback);
}
}
class CloudflareServiceToken : RequestHandler
{
public CloudflareServiceToken(string CF_KEY, string CF_SECRET)
{
_key = CF_KEY;
_secret = CF_SECRET;
}
private string _key, _secret;
protected override IResourceRequestHandler GetResourceRequestHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling)
{
if (!string.IsNullOrEmpty(_key) && !string.IsNullOrEmpty(_secret)) return new CloudflareServiceTokenHandler(_key, _secret);
else return base.GetResourceRequestHandler(chromiumWebBrowser, browser, frame, request, isNavigation, isDownload, requestInitiator, ref disableDefaultHandling);
}
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
