我想在我的服务器中公开两个合同。该服务的应用程序配置文件是:
<services>
<service name="Interface1Service">
<endpoint address="" binding ="customBinding" contract="Interface1"
bindingName="binding_Interface1" bindingConfiguration="CustomBinding_Interface1" name="epInterface1">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8733/Interface1/" />
</baseAddresses>
</host>
</service>
<service name="Interface2Service">
<endpoint address="" binding ="customBinding" contract="Interface2"
bindingName="binding_Interface2" bindingConfiguration="CustomBinding_Interface1"
name="epInterface2Service">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8733/Interface2/" />
</baseAddresses>
</host>
</service>
</services>
在我的控制台应用程序中托管我的服务:
ServiceHost miHost = new ServiceHost(typeof(Interface1Service));
miHost.Open();
ServiceHost miHost2 = new ServiceHost(typeof(Interface2Service));
miHost2.Open();
Console.ReadKey();
miHost.Close();
miHost2.Close();
我怀疑这是否是暴露这两种服务的正确方法,或者有任何方法只使用一个serviceHost来做到这一点。
因为我已经看到很多相关操作的合同很常见,例如一个用于修改产品的界面,另一个用于修改人员,其他用于订单等等。
非常感谢你。
答案 0 :(得分:2)
..是否只能使用一个serviceHost来做到这一点?
当然可以在单个主机容器中公开多个服务合同。您只需创建一个实现所有服务接口的类:
public class MyService : Interface1, Interface2
{
// implement your operations here...
}
// then create service host:
var miHost = new ServiceHost(typeof(MyService));
我怀疑这是否是揭露两种服务的正确方法..
即使WCF允许您这样做,但 是否这样做是另一个问题。
如果服务公开的操作被认为不同,以至于它们被分成不同的服务合同,那么这是一个明确的信号,即这些服务实际上是不同的服务,因此应该这样对待。
对所有这些不同的服务有一个共同的具体实现引入了耦合,并且可能不应该这样做。