c# - WCF 中的多个基地址和多个端点

标签 c# .net wcf base-address

我正在使用两个绑定(bind) TCP 和 HTTP。我想为两个绑定(bind)提供 mex 数据。 我想要的是 mexHttpBinding 仅公开 HTTP 服务,而 mexTcpBinding 仅公开 TCP 服务。或者这可能是我仅从 HTTP 绑定(bind)访问 stats 服务而从 TCP 访问 eventLogging 服务?

例如:

  • 对于 TCP,我应该只有

    net.tcp://localhost:9001/ABC/mex
    net.tcp://localhost:9001/ABC/eventLogging
    
  • 对于 HTTP

    http://localhost:9002/ABC/stats
    http://localhost:9002/ABC/mex
    

当我连接到任何基地址(使用 WCF 测试客户端)时,我是否能够访问所有服务?就像当我连接到 net.tcp://localhost:9001/ABC 时,我能够使用 HTTP 绑定(bind)上提供的服务。为什么会这样?

<system.serviceModel>
  <services>
    <service behaviorConfiguration="ABCServiceBehavior" name="ABC.Data.DataServiceWCF">
      <endpoint address="eventLogging" binding="netTcpBinding" contract="ABC.Campaign.IEventLoggingService" />
      <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration="" contract="IMetadataExchange" />
      <endpoint address="stats" binding="basicHttpBinding" contract="ABC.Data.IStatsService" />
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      <host>
        <baseAddresses>
          <add baseAddress="net.tcp://localhost:9001/ABC" />
          <add baseAddress="http://localhost:9002/ABC" />
        </baseAddresses>
      </host>
    </service>
  </services>
  <behaviors>
    <serviceBehaviors>
      <behavior name="ABCServiceBehavior">
        <serviceMetadata httpGetEnabled="false" />
        <serviceDebug includeExceptionDetailInFaults="true" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
</system.serviceModel>

最佳答案

I want to give mex data on both bindings. What I want is that the mexHttpBinding only exposes the HTTP services while the mexTcpBinding exposes TCP services only. Or is this possible that I access stats service only from HTTP binding and the eventLogging service from TCP?

嗯,在这种情况下,您需要有两个独立的、不同的服务 - 一个只公开 eventLogging,另一个只公开 stats

当您有两个独立的服务时,您可以通过 HTTP 公开一个,它的 mex 将只显示那些方法,另一个通过 TCP/IP 公开它的方法。

<services>
  <service name="ABC.Data.DataServiceWCFEventlogging"
           behaviorConfiguration="ABCServiceBehavior" >
    <endpoint address="eventLogging" 
              binding="netTcpBinding" 
              contract="ABC.Campaign.IEventLoggingService" />
    <endpoint address="mex" 
              binding="mexTcpBinding" 
              contract="IMetadataExchange" />
    <host>
       <baseAddresses>
         <add baseAddress="net.tcp://localhost:9001/ABC" />
       </baseAddresses>
     </host>
  </service>
  <service name="ABC.Data.DataServiceWCFStats"
           behaviorConfiguration="ABCServiceBehavior" >
     <endpoint address="stats" 
               binding="basicHttpBinding" 
               contract="ABC.Data.IStatsService" />
     <endpoint address="mex" 
               binding="mexHttpBinding" 
               contract="IMetadataExchange" />
     <host>
        <baseAddresses>
           <add baseAddress="http://localhost:9002/ABC" />
        </baseAddresses>
     </host>
  </service>
</services>

如果您在同一服务上同时使用这两种方法,则无法仅通过 http 公开一部分而通过 tcp/ip 公开另一部分。

关于c# - WCF 中的多个基地址和多个端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2399865/

相关文章:

c# - 无法在我的电脑中粘贴任何文本或文件 - 剪贴板错误

c# - WCF:如何在客户端缓存来自 OData 的集合

c# - 如何从站点地图文件中获取当前页面标题?

c# - PowerShell - 从 .csproj 文件获取版本

c# - 在 Saucelabs 中使用 selenium c# 进行浏览器扩展测试

c# - 有没有办法在 C# 中获取内部类列表?

c# - Winforms中如何设置自定义控件中Colors的默认值?

c# - ExcelDNA : How to make a WCF configuration file available to my Excel AddIn?

WCF行为评估顺序和ServiceAuthorizationBehavior

javascript - 正则表达式 ['!@#$%*\]\[()-=_+{}:\";?,.\/A-Za-z0-9\s] 允许 < 字符