2017-02-20 14 views
0

私はservicestack v3を使用しています。サービス戦略サービスが展開されているIISには、2つのWebサイト(パブリックサービスとストレージサービス)があります。公共サービスのウェブサイトでは、特定の応答フィルタを使用する必要があります。一方、ストレージサービスのWebサイトでは必要ありません。サービス遅延応答フィルタをweb.config内に登録できますか?

応答フィルタをAppHost.Configureメソッドの内部ではなく、web.config内に登録することが可能かどうかは、必要なWebサイトでのみ登録し、同じサービスキット(AppHost)を使用して、 dll。私はservicestack(Apphost)のDLLの2つの異なるコードバージョンを持っていないことを望むだろう。 ApphostコードはC#にあり、実際のサービスはF#で書かれています。

ありがとうございました。にある実際の応答フィルタの

public interface ICustomResponseFilter 
{ 
    Action<IHttpRequest, IHttpResponse, object> GetAction(); 
} 

2)作成したDLLを含むクラス:

1)作成したDLLを含むICustomResponseFilterインタフェース:

答えて

0

最終的に、私は設定プラグインresponsefiltersを作成する手順に従っ

public class AuthResponseFilter : ICustomResponseFilter 
{ 
    public Action<IHttpRequest, IHttpResponse, object> GetAction() 
    { 
     // code implementation that returns Action type 
    } 
} 

3)データベースのフィルタのタイプ名を保存しました。(configuratイオン)。

table: SSResponseFilters 
important columns: 
    typename: varchar (values in format: <namespace>.<classname>) 
    assemblyname: varchar (values in format: <assemblyname>) 
    site: varchar (possible values: public|storage) 

この構成では、カスタムAPPHOSTクラスが使用されているweb.configファイル

4)に例えば、また、他のどこ行ってもよいです。そのクラスの中には、フィルタが登録されています。

public class CustomAppHost : AppHostBase 
{ 
    private List<Action<IHttpRequest, IHttpResponse, object>> responseFilterActions = null; 

    public CustomAppHost(serviceType, serviceName, assemblies) : base(serviceName, assemblies) 
    {  
     List<ICustomResponseFilter> rfList = GetListOfConfiguredResponseFilters(serviceType); 
     /*In GetListOfConfiguredResponseFilters method, serviceType is taken from config and it determines which site we are in currently and retrieves the configured types explained in above step for that site. We need to use reflection here.*/ 
     this.responseFilterActions = GetActionsListFromResponseFilters(rfList); 
     /*GetActionsListFromResponseFilters method calls the GetAction method of the filters and generates a list of Action types and returns that list*/ 
    } 

    public override void Configure(Funq.Container container) 
    { 
     // other code .. 

     EndpointHost.ResponseFilters.AddRange(responseFilterActions); 
    } 
} 

5)すべてのサイトで、インターフェイスを含むdllは必須です。新しいレスポンスフィルタがプラグインされるときはいつでも、インタフェースを実装しているクラスを含むdllを記述し、フィルタのDBにエントリを作成することができます。レスポンスフィルタDLLは、必要な場合にのみ使用できます。サービススタックDLL(AppHost)はすべてのサイトで同じです。

関連する問題