多个端点 - 公共/内部

时间:2015-04-30 09:04:53

标签: c# wcf

我想在我的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,如下图所示:

enter image description here

我预计,对于net.tcp我只会看到IComputingModuleAdminProvider而对于http,我会看到IComputingModuleProvider

我还试图将端口8092从服务器防火墙上的允许端口中排除 - 这导致只能通过使用http base地址添加服务引用,但是,我仍然可以看到两个服务合同都已公开,如上图所示。 因此,也可以通过http获得仅限管理员的方法。

问题:

我在app.config文件中做错了什么或这是标准行为?我知道我在同一个本地网络上,但我仍然需要在防火墙中添加例外,因此我预计,IComputingModuleAdminProvider将不能通过http协议提供。

更新 Otiel建议的屁股,如果我像这样创建新的ServiceContract:

public class ComputingModuleAdminProvider : IComputingModuleAdminProvider

在App.Config中将其标记为新的<service>,我可以将管理和标准界面分开。

0 个答案:

没有答案