簡體   English   中英

WCF服務端口共享問題

[英]WCF Service Port Sharing problem

我試圖在同一端口上托管多個WCF REST服務。 我啟動了Net.Tcp端口共享服務,這是我的app.config文件:

<?xml version="1.0"?>
<configuration>

  <system.serviceModel>    
    <services>  
      <service name="MyService">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost/services/"/>
          </baseAddresses>
        </host>

        <endpoint
          address="test"
          binding="webHttpBinding"
          contract="IMyService"/>
      </service>
    </services>

    <behaviors>
      <endpointBehaviors>
        <behavior>
          <webHttp/>
        </behavior>
      </endpointBehaviors>
    </behaviors>

    <bindings>
      <netTcpBinding>
        <binding name="PortSharingEnabled" portSharingEnabled="true">
        </binding>
      </netTcpBinding>
    </bindings>

  </system.serviceModel>

</configuration>

我仍然無法在同一端口上托管兩個服務。

當我嘗試運行第二項服務時,出現以下錯誤: http : //screencast.com/t/Vlakb26XbuQr “本地計算機上的服務服務已啟動,然后停止。如果某些服務未被其他服務或程序使用,則它們會自動停止”。

跟蹤日志( http://screencast.com/t/tJ5Gvmy4Dgm7 )說: “ HTTP無法注冊URL http:// +:7778 / MyServiceName / 。另一個應用程序已經在HTTP.SYS中注冊了此URL。”

編輯:

<services>
  <service name="Service1">
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:7778/"/>
      </baseAddresses>
    </host>
    <endpoint
      address="first"
      binding="webHttpBinding"
      contract="IService1"/>
  </service>
  <service name="Service2">
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:7778/"/>
      </baseAddresses>
    </host>
    <endpoint
      address="second"
      binding="webHttpBinding"
      contract="IService2"/>
  </service>
</services>

我想缺少一些端口共享功能嗎?

您嘗試執行的操作沒有任何意義。 “端口共享”可以通過兩種方式發生:

  • Http:這在Windows上是開箱即用的,因為HTTP由HTTP.SYS內核級驅動程序處理。 您不需要做任何特別的事情。

  • Net.Tcp端口共享。 這需要此處概述的步驟。

但是,您(唯一的)端點被配置為使用HTTP綁定,而不是Net.Tcp-Binding(如果您要使用REST風格的服務,這將很有意義),因此Net.Tcp端口共享在此處不適用。

如果沒有更多關於您真正想做什么,看到的錯誤的信息,很難提供幫助。

編輯

仍然令人困惑。 app.config ,看起來好像您正在將80端口用於端點,但是您引用的錯誤消息是8080端口。無論如何,以下內容仍然適用。

從您提供的錯誤消息來看,好像您試圖使用完全相同的端點URI兩次注冊/啟動服務。 這是行不通的。 您可以重用hostname:port部分,甚至路徑的一部分,但是完整的URI必須唯一。

例如,您可以使用以下端點URI:

請注意,對於Net.Tcp端口共享,這是相同的-您可以共享端口 ,但不能共享完整(唯一)的端點URI。 因此,名稱共享為“端口”。 它不是透明的負載平衡機制。

即使有一個可接受的答案,我還是會以編程方式定義服務時拋出類似的問題。 我通過以下方式創建服務:

_serviceHost = new ServiceHost(_cmdService, new Uri(_serviceAddress));

ServiceEndpoint endPoint =
    _serviceHost.AddServiceEndpoint(typeof(IHttpCmdService), _binding, _endpointAddress);
endPoint.Behaviors.Add(new WebHttpBehavior());

令人驚訝的是,當我嘗試使用相同的_serviceAddress和不同的_endpointAddress值多次執行此操作時,它失敗了。 但是,如果我將整個地址放入_serviceAddress它將成功。 兩種方法都以相同的最終服務URL結尾。

因此,知道了這一點,我想知道您是否可以使用不同的baseAddress值來創建服務,它將成功啟動,因此看起來像這樣:

<services>
  <service name="Service1">
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:7778/first/"/>
      </baseAddresses>
    </host>
    <endpoint
      address=""
      binding="webHttpBinding"
      contract="IService1"/>
  </service>
  <service name="Service2">
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:7778/second/"/>
      </baseAddresses>
    </host>
    <endpoint
      address=""
      binding="webHttpBinding"
      contract="IService2"/>
  </service>
</services>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM