У меня есть решение, которое включает в себя толстый клиент (реализованный с помощью CefSharp для большей части пользовательского интерфейса), и приложение javascript должно выполнять некоторую логику C # в приложении, на котором размещен браузер CEF. Я рассматривал возможность использования WebView.RegisterJsObject()
, но я смогу написать меньше связующего кода, если смогу просто использовать $.ajax()
на html-страницах.
У меня уже настроен ServiceStack для веб-служб и веб-клиента в этом решении. Я хотел бы направлять запросы из браузера CEF на локальный хост ServiceStack (фактически не используя http).
Вот некоторый псевдокод, чтобы проиллюстрировать, что я хотел бы сделать:
public partial class MainWindow : IRequestHandler {
WebView _webView;
CefSharpServiceStackHost _serviceHost;
public MainWindow() {
// initialize CefSharp...
_webView.RequestHandler = this;
// initialize ServiceStackHost...
}
// other IRequestHandler methods...
// method this intercepts ajax calls from the CEF browser
public bool OnBeforeResourceLoad(IWebBrowser browser, IRequestResponse requestResponse) {
// translate CefSharp.IRequestResponse to ServiceStack.IRequest or HttpRequest
// should execute HelloService.Any() for the requestResponse.Url = "/hello/Zach"
var response = _serviceHost.ExecuteService(Translate(requestResponse));
requestResponse.RespondWith(response.Stream);
return false;
}
}
[Route("/hello/{Name}")]
public class Hello {
public string Hello { get; set; }
}
public class HelloService {
public object Any(Hello request) { // ... }
}
Я не могу понять, как расширить ServiceStackHost поэтому я могу передать ему какой-то объект запроса. Это вообще возможно?