2017-08-29 4 views
1

私のSSサービスをMVCアプリケーションのコントローラから呼び出せるようにする必要があります。理想的には、httpリクエストなどをビルドするオーバーヘッドを避けるため、プロセス中に呼び出すことができます。Validation&FiltersでIn-processでServiceStackサービスを呼び出すときの問題

ドキュメントを精査することで、2つの方法が提案されていますが、完全には機能しません。

1)ServiceGateway - サービスゲートウェイを使用します。これは検証フィルタを呼び出しますが、追加した他の顧客フィルタは呼び出されません。 applyFiltersオプションはありません。

2)HostContext.ServiceController.Execute - このメソッドにはapplyFiltersという専用のオプションがあり、trueに設定するとフィルタと検証が適用されます(ただし、TypedRequestFiltersではなくGlobalFiltersのみ実行されます)。しかし、サービスで[CacheResponse]属性が設定されている場合、クライアントに応答を上書きして、MVCコントローラのフローをオーバーライドするので、これを停止する方法はわかりません。 applyFiltersをfalseに設定した場合、またはCacheResponseをオフにした場合、これは実行されません。キャッシュの優先度を変更しても効果はありません。

私のコントローラのアクションメソッド内から、次のように私は、Executeメソッドを呼び出しています:

HostContext.ServiceController.Execute(serviceRequest, HostContext.GetCurrentRequest(), true); 

このメソッドの前にしてもリターンが応答がChromeでWebページにフラッシュしてから何も/ nullがあるさ制御メソッドから返されます。

ポイント1)機能不足とポイント2)実装上の不具合があると感じますが、いずれかの救済のためのSSの知識には十分な自信がありません!助けてください!

ありがとうございました。

答えて

0

フィルタはpart of the HTTP Request Pipelineとして実行され、カスタムHTTP応答で現在のリクエストを終了できます。 Request Filterを実行した後に、IRequest.IsClosedをチェックすると、リクエストフィルタによって終了したかどうかを確認できます。動作は内部ゲートウェイ要求と互換性がないため、ゲートウェイでそれらを実行するオプションはありません。

これらのServiceControllerメソッドをIn Process Requestとしてthis commitにマークしました。これはInprocess Requestsを無視する[CacheResponse]属性の問題を解決するはずです。

この変更はv4.5.13から利用できます。現在はavailable on MyGetです。

関連する問題