C# WCF同一配置中的多个服务同一合同
我正在尝试承载同一合同的不同服务实现: 原因是需要一个虚拟实现来进行外部测试 我正在尝试在同一个WindowsService中托管这两个服务:C# WCF同一配置中的多个服务同一合同,c#,wcf,rest,C#,Wcf,Rest,我正在尝试承载同一合同的不同服务实现: 原因是需要一个虚拟实现来进行外部测试 我正在尝试在同一个WindowsService中托管这两个服务: private ServiceHost _host; private ServiceHost _dummy; protected override void OnStart(string[] args) { _host = new ServiceHost(typeof(Service));
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();
}
privateServiceHost\u主机;
私有服务主机_虚拟;
启动时受保护的覆盖无效(字符串[]args)
{
_主机=新服务主机(类型(服务));
_host.Open();
//试图避免使用app.config,因为它已经被主机托管了
_dummy=新服务主机(typeof(TestDummyService));
_dummy.Description.Endpoints.Clear();
_dummy.AddServiceEndpoint(类型化(IService)),
新建WebHttpBinding(),
@“/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且具有合约“IHTTPGethelpageandMetadataContract”的ChannelDispatcher
感谢您的帮助
更新1
我的目标是在一个WindowsService中托管同一契约的两个不同实现(IService
)
我还想在配置文件中配置它们。因此我发现,即使testdummy服务是以编程方式添加的,它仍然获得了服务metadatabehavior 我的解决方案是不将dehavior设置为默认值-鉴于其名称: app.config:
<service name="namespace.Service" behaviorConfiguration="someName">
//。。后来:
<behavior name="someName">
<serviceMetadata httpGetEnabled="true"
httpGetUrl="<link>/Service.svc/About" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
代码的其余部分是相同的您不能添加另一个端点并用不同的名称填写地址:
<endpoint address="/SecondService"
binding="webHttpBinding2"
contract="namespace.IService"
/>
Url变成/Service.svc/SecondService我想知道业务场景是什么。我想,客户端不应该知道实现,它只是服务的URL将指示(或路由)到实现 请澄清
参考此现有文件,并让 让我知道这是否有意义
上面的帖子暗示了这一实现,请参阅此了解部署详细信息。hi-thnks了解反馈。不,不幸的是,我不能。因为端点不允许我决定使用什么实现。这在服务标签中指定:
链接将使其反之亦然。我只有一个合同,但该合同有多个实现。此外,该链接没有提供任何关于如何主持该死的事情的信息:)但感谢上面的反馈,只有1个合同和2个实施,我不知道为什么它没有帮助你。我已经编辑了答案并添加了一个链接。希望它有帮助…我会给你一个尝试,但链接不是我要找的。sry