2016-03-28 38 views
-1

背景は私が変更することはできません既存のサービス契約を結んでいるマルチテナント

をサポートするために、URLからリクエストヘッダを追加します。サービスの実装は、私がサポートし、変更できるコードです。

現在、サービスは、単一のテナントをサポートしており、このサービスの複数のインスタンスは、例えばhttp://foo-tenant1.com/service.svchttp://foo-tenant2.com/service.svc

のために、ホストされている今、私は単一のサービスで、複数のテナントをサポートするサービスを変更したいです。たとえば、住所:http://foo.com/service.svcでホストされているサービスで、アドレスにテナントIDを追加して複数のテナントをサポートしています。例えば

WCFは、何らかの形で、ワイルドカードルーティングをサポートすることができた場合:

http://foo.com/service.svc?tenant1http://foo.com/service.svc?tenant2:それは何らかの形でクエリ文字列をサポートできる場合

http://foo.com/tenant1/service.svchttp://foo.com/tenant2/service.svc等...

をか

または他の方法...

これを呼び出すクライアントは、テナントの概念を持たないためです。クライアントの視点から見ると、テナントごとにURLが1つしかありません。

質問

どのように私はこのようなエンドポイント「すべてをキャッチ」でWCFサービスをホストすることができますか?またはルーティングやURLの書き換えでこれを行うことはできますか?テナントIDをリクエストヘッダに入れ、マルチテナントをサポートするようにサービスコードを変更することができます。

次に、リクエストヘッダから読み込み、テナントIDをサポートするようにサービスコードを変更することができます。

+0

サービス契約を変更できないと言うと、コードにアクセスできないということですか? –

+0

さらに、http://foo.com/tenant/service.svcとhttp://foo.com/tenant1/service.svcは、1つのサービスでは達成できない2つの異なるWCFサービスを意味します。あなたはWCF RESTサービスを参照したいと思っています。http://foo.com/Service.svc/tenantとhttp://foo.com/Service.svc/tenant1 –

+0

@HarmeetBhamra私はクライアントを変更することができないので、サービスコードを変更できますが、契約は変更できません – EdmundYeung99

答えて

0

サービスのコードにアクセスできない場合、またはコードを変更できない場合は、少し外に考えてください。 1つの選択肢は、IIS内で別々のアプリケーションを作成することです。あなたのサービスでweb.configの値を変更して、別のデータベースを参照するようにサービスを設定できるようにしてください。

しかし、web.configルートがすべての変数を取得しない場合は、IHttpModuleの実行を検討する必要があります。サービススタックの早い段階でそれを注入すると、URLで何をするかを選択できるようになりますが、呼び出されるものを完全にオーバーライドしてベースを呼び出さない限り、後で呼び出されるコードを制御することはできませんメソッドを実行し続けます。

バッキングコードを制御できる404ページを作成して、その時点で何かを動的に実行できるようにすることもできます。 web.configファイルを変更して、404にURLを指定して実行させるだけです。警告はされていますが、それはすべて404です。

最後に、サービスコントラクトを実装するコードを削除できる場合、契約を実装するサーバーにDLLをドロップし、代わりにこのDLLを指すようにweb.configファイルを更新します。ただし、削除するDLLによって他のコードのかなりの部分が削除されても、これは可能ではない可能性があります。

コードにアクセスできない場合は、これらすべてのソリューションがかなり進歩したコンセプトなので、時間がかかるでしょう。

+0

私はサービスコードを変更できます。クライアントは、既存のサービスメソッドのみを呼び出すことができます。 – EdmundYeung99

関連する問題