我正在开发一个 WCF 服务,它有一个名为 MyApp.IOperationService 的合同。
<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>
该服务有一个称为 Login 的操作,它将 pincode 传播到 OperationService 对象。
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,而且对于我谦虚的目的来说,它看起来已经非常复杂了。
问题是是否可以通过另一种方式实现这一点(未通过元数据公开的现有服务的管理合同/接口)?
谢谢你。