[英]IIS hosting for WCF service with 2 contracts or hosting 2 services with dependencies
我正在开发一个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的操作,该操作会将密码传播到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,对于我卑微的目的来说似乎已经非常复杂了。
问题是,是否可以通过另一种方式来实现(现有服务的管理合同/接口未通过元数据公开)?
谢谢。
除了使用WCF可扩展性点之外,我找不到解决该问题的方法。 我使用Microsoft.Practices.Unity通过IoC管理服务,然后在.svc文件中使用了Factory属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.