MyApp.IOperationService というコントラクトを持つ WCF サービスを開発しています。
<service name="MyApp.OperationService">
<endpoint address="OperationService" binding="basicHttpBinding" contract="MyApp.IOperationService" />
</service>
サービスの動作については、アプリケーションが共有物理リソースを使用するため、InstanceContextMode = InstanceContextMode.Single および ConcurrencyMode = ConcurrencyMode.Multiple を使用しました。
このサービスの管理インターフェースが必要だったので、最初に同じサービス内に新しいコントラクトを追加しました。このアプローチは、私には魅力的ではありませんでした。なぜなら、管理コントラクトは、メタデータを通じて、操作コントラクトを使用するクライアントに公開されていたからです。
その後、別のサービスを作成することを選択しました。
<service name="MyApp.AdminService">
<endpoint address="Admin" binding="netTcpBinding" contract="MyApp.IAdminService" />
</service>
このサービスには、PIN コードを OperationService オブジェクトに伝達する Login という 1 つの操作があります。
namespace MyApp
{
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Single, UseSynchronizationContext = false)]
public class AdminService : IAdmin
{
MyApp.OperationService objOperationService = null;
public AdminService(MyApp.OperationService objOperationService)
{
m_objOperationService = objOperationService;
}
public void Login(string pincode)
{
m_objOperationService.Login(pincode);
}
}
}
セルフホスティング環境で MyApp.OperationService オブジェクトを作成し、このオブジェクトを MyApp.AdminService のコンストラクターに渡します。IIS ホスティングの場合、WCF 拡張ポイントを使用して IInstanceProvider を実装し、次に ServiceHostFactory を使用する必要があることがわかりました。
この時点で私は停止し、私の AdminService が IIS が制御する MyApp.OperationService を既に作成していることを期待していることを考えると、これがまったく機能するかどうか疑問に思いました。
問題は、これ (メタデータを通じて公開されていない既存のサービスの管理契約/インターフェイス) を別の方法で実現できるかどうかです。
ありがとうございました。