我试图托管同一合同的不同服务实现:
原因是需要一个虚拟实现来进行外部测试。
我试图在同一个WindowsService中托管两者:
private ServiceHost _host;
private ServiceHost _dummy;
protected override void OnStart(string[] args)
{
_host = new ServiceHost(typeof(Service));
_host.Open();
//trying to avoid the app.config beeing used - because its already been hoste by _host
_dummy = new ServiceHost(typeof(TestDummyService));
_dummy.Description.Endpoints.Clear();
_dummy.AddServiceEndpoint(typeof(IService),
new WebHttpBinding(),
@"<link>/Dummy.svc/");
_dummy.ChannelDispatchers.Clear();
_dummy.Open();
}
这是配置文件:
<system.serviceModel>
<services>
<service name="namespace.Service">
<host>
<baseAddresses>
<add baseAddress="<link>/Service.svc"/>
</baseAddresses>
</host>
<endpoint address=""
binding="webHttpBinding"
contract="namespace.IService"
behaviorConfiguration="web" />
<endpoint address="/mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors >
<behavior>
<serviceMetadata httpGetEnabled="true"
httpGetUrl="<link>/Service.svc/About" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name ="web">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
带有合约'IHttpGetHelpPageAndMetadataContract'的/Service.svc/About上的ChannelDispatcher无法打开。
感谢任何帮助。
更新1
我的目标是在一个WindowsService中托管同一个合同(IService
)的两个不同实现。
我还想在配置文件中配置它们。
答案 0 :(得分:1)
我想知道什么是业务场景。我猜想,客户端不应该知道实现,它只是服务的URL指示(或路由)实现。
请澄清。
请参阅此现有post并告知 我知道它是否有意义。
以上帖子暗示了实现,请参阅此post了解部署详情。
答案 1 :(得分:0)
所以我发现,即使是testdummy服务添加了程序,它仍然得到服务metadatabehavior。
我的解决方案是不要将行为默认 - 在名称上给出:
的app.config:
<service name="namespace.Service" behaviorConfiguration="someName">
// ..稍后:
<behavior name="someName">
<serviceMetadata httpGetEnabled="true"
httpGetUrl="<link>/Service.svc/About" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
其余的代码,同样的
答案 2 :(得分:0)
无法添加其他端点并使用不同的名称填写地址:
<endpoint address="/SecondService"
binding="webHttpBinding2"
contract="namespace.IService"
/>
Url成为/Service.svc/SecondService