0

シック クライアント (大部分のユーザー インターフェイスに CefSharp を使用して実装) を含むソリューションがあり、javascript アプリケーションは、CEF ブラウザーをホストするアプリケーションでいくつかの C# ロジックを実行する必要があります。を使おうと思ったのですが、htmlページからそのままWebView.RegisterJsObject()使えるようになればグルーコードが少なくてすみます。$.ajax()

このソリューションでは、Web サービスと Web クライアント用に 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を拡張して、ある種の要求オブジェクトをそれに渡すことができるようにする方法です。これは可能ですか?

4

2 に答える 2