我试图托管同一合约的不同服务实现:
原因是需要一个虚拟实现来进行外部测试。
我正在尝试将两者托管在同一个 Windows 服务中:
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>
/Service.svc/About 处带有合约“IHttpGetHelpPageAndMetadataContract”的 ChannelDispatcher 无法打开。
任何帮助表示赞赏。
更新1
我的目标是同一个合约有两种不同的实现(IService
)托管在一个 WindowsService 中。
我还想在配置文件中配置它们。
嗯,我想知道业务场景是什么。我的猜测是,客户端不应该知道实现,它只是服务的 URL 将指示(或路由)到实现。
请澄清。
参考这个现有的post https://stackoverflow.com/questions/9567810/single-endpoint-with-multiple-service-contracts然后让
我知道这是否有意义。
上面的帖子暗示了实现,参考这个post http://hectorcorrea.com/blog/multiple-endpoints-for-a-wcf-service了解部署详细信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)