1)メッセージベースのWebサービスの機能なしで、これら2つの機能のみを使用することは可能ですか?ServiceStackを初期化する必要があり、2回初期化すると(両方のプロジェクトで)エラーが発生します。
最新のServiceStack.MvcNuGetパッケージをインストールすると、ServiceStackの組み込みプロバイダーへの便利なアクセスを提供するMVCコントローラーであるベースServiceStackControllerを取得できます。必要な依存関係を使用してコントローラーを自動配線する必要がありますが、たとえば、注入されICacheClient
ます。
ServiceStackのWebFrameworkを使用していない場合でも、AppHostがあると、依存関係を登録するのに便利な場所になります。ServiceStackは、Web.configで指定されたASP.NETのIHttpHandlerマッピングによってトリガーされるため、マッピングが指定されていない場合、ServiceStackを外部から呼び出すことはできませんが、登録された依存関係には、次の方法で内部的にアクセスできます。
var cache = AppHost.Resolve<ICacheClient>(); //Get ICacheClient for SS IOC
2)ServiceStackの実装を2つのプロジェクトに分割することは可能ですか?
AppHostがある場合、(設計上)ホストプロジェクトに複数のインスタンスを含めることはできません。AppHostは、すべてのサービス依存関係を登録し、Webアプリケーション全体に適用される設定を構成する必要があるホストプロジェクトに類似している必要があるためです。またはサービス。
ただし、サービスの実装を複数のアセンブリに分割し、AppHostBaseコンストラクターで指定することにより、ServiceStackにすべてをスキャンさせることができます。例:
public class AppHost : AppHostBase
{
public AppHost() : base("My Service",
typeof(AServiceInDll1).Assembly, typeof(AServiceInDll2).Assembly/*, etc.*/){}
}
2)続き ServiceStackの認証プロバイダーを使用してBLプロジェクトで認証のプロセスを維持したいのですが、mvcプロジェクトですべてのUI / Cookieを自分で(またはServiceStackの助けを借りて)処理します。
MVCを使用し、ServiceStackで認証する例については、ServiceStack.UseCasesCustomAuthenticationMvcサンプルプロジェクトを参照してください。
3)BLプロジェクトでServiceStackのキャッシュを使用したいのですが、セッションIDを受信するためにいくつかのセッションCookieを維持する必要があると思います。それを行う正しい方法は何ですか?この目的のための組み込みのヘルパー関数はありますか?
他のC#クラスと同じように、 ServiceStackのキャッシングプロバイダーを使用できます。つまり、ビジネスロジックをバインドしICacheClient
て、IOCに具体的な実装を挿入します。
セッションの場合、ServiceStack.MvcServiceStackControllerのメソッドを使用してbase.SessionAs<T>
セッションにアクセスできます。セッションを保存し直すには、拡張メソッドを使用できます。これらの方法はどちらも、ASP.NETコンテキスト(提供されていない場合はASP.NETのHttpContextシングルトンを使用)が機能する必要がありますが、セッションにアクセスするたびにクライアントに(サーバーによって)追加されるように自動的に指示されるServiceStackのCookieに依存しているためです。 。IHttpRequest.SaveSession()
ss-id/ss-pid
ビジネスロジックサービスがASP.NETに依存しないようにする場合はSystem.Web
、セッションにアクセスして保存し、コントローラーで実行してビジネスロジックに渡すことをお勧めします。
ServiceStackのセッションがどのように機能するかについての背景情報については、 SessionsWikiページを読むことをお勧めします。
ServiceStackとASP.NETまたはMVC間のASP.NETコンテキストの統合
ServiceStackの拡張メソッドの一部はこれらの組み込み型に依存しているため、ServiceStackとASP.NETまたはMVCの間で高度な統合を行う場合に役立つため、この情報を追加します。
ServiceStack IHttpRequestまたはIHttpResponse(任意のHTTP / Controllerリクエスト内)を次のコマンドで作成できます。
var ssHttpRequest = System.Web.HttpContext.Current.Request.ToRequest();
var ssHttpResponse = System.Web.HttpContext.Current.Response.ToResponse();
最後に、次のコマンドを使用して、完全なリクエストコンテキスト(IHttpRequestとIHttpResponseの両方をカプセル化する)を作成できます。
var ssRequestContext = System.Web.HttpContext.Current.ToRequestContext();