我想在我的WCF服务上公开2个端点。 First通过HTTP为用户提供标准方法,第二种方法提供“仅管理员”方法ovet net.tcp。
我只有一个类,它实现了端点公开的两个ServiceContracts,如:
public class ComputingModuleProvider : IComputingModuleProvider, IComputingModuleAdminProvider
我的App.Config看起来像这样:
<services>
<service behaviorConfiguration="ComputingModuleBehaviour" name="ComputingModuleProvider.ComputingModuleProvider">
<endpoint address="ComputingModuleProvider" binding="basicHttpBinding" contract="ComputingModuleProvider.IComputingModuleProvider" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<endpoint address="ComputingModuleAdminProvider" binding="netTcpBinding" contract="ComputingModuleProvider.IComputingModuleAdminProvider" />
<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8091/ComputingModuleProvider"/>
<add baseAddress="net.tcp://localhost:8092/ComputingModuleProvider" />
</baseAddresses>
</host>
</service>
</services>
现在情况是我在办公室的服务器 - 计算机上有服务,客户端在我的个人计算机上(但它们都连接到本地网络)。
但是,我不得不在服务器防火墙上添加一个例外,并允许在端口8091和8092上进行通信,以便能够在客户端添加服务引用和生成代理。如果允许此异常,我可以使用net.tcp和http base地址添加服务引用。
问题是,我在每个基地地址都看到了两个ServiceContrac,如下图所示:
我预计,对于net.tcp我只会看到IComputingModuleAdminProvider
而对于http,我会看到IComputingModuleProvider
。
我还试图将端口8092从服务器防火墙上的允许端口中排除 - 这导致只能通过使用http base地址添加服务引用,但是,我仍然可以看到两个服务合同都已公开,如上图所示。 因此,也可以通过http获得仅限管理员的方法。
问题:
我在app.config文件中做错了什么或这是标准行为?我知道我在同一个本地网络上,但我仍然需要在防火墙中添加例外,因此我预计,IComputingModuleAdminProvider
将不能通过http协议提供。
更新 Otiel建议的屁股,如果我像这样创建新的ServiceContract:
public class ComputingModuleAdminProvider : IComputingModuleAdminProvider
在App.Config中将其标记为新的<service>
,我可以将管理和标准界面分开。