簡體   English   中英

IIS8 在 net.tcp 上沒有偵聽端點:

[英]IIS8 There was no endpoint listening at net.tcp:

我在 IIS8 中有一個 WCF 服務主機,我想使用 net.tcp 綁定。

我有這個配置:

網頁配置:

<service behaviorConfiguration="MyBehavior"
  name="DecryptService.EmailCenterDecryptTCP">
    <host>
      <baseAddresses>
        <add baseAddress="net.tcp://XX.XX.XX.XX:808/VirtualFolder/Service.svc" />
      </baseAddresses>
    </host>

    <endpoint address=""
          binding="netTcpBinding"
          bindingConfiguration="portSharingBinding"
          name="MyServiceEndpoint"
          contract="ServiceNamespace.IService">
    </endpoint>

    <endpoint address="mextcp"
          binding="mexHttpBinding"
          bindingConfiguration=""
          name="MyServiceMexTcpBidingEndpoint"
          contract="IMetadataExchange" />
</service>

當我嘗試使用以下配置在與 IIS8 相同的機器上使用該服務時工作正常:

<client>
        <endpoint address="net.tcp://YY.YY.YY.YY:808/VirtualFolder/Service.svc"
            binding="netTcpBinding" bindingConfiguration="MyServiceEndpoint"
            contract="ServiceReference1.IService" name="MyServiceEndpoint" />
    </client>

YY.YY.YY.YY 是機器的本地 IP,但是當我嘗試在另一台機器上使用該服務時,將 YY.YY.YY.YY 更改為運行 IIS8 的機器的外部 IP (ZZ.ZZ.ZZ.ZZ)我收到以下錯誤:

There was no endpoint listening at net.tcp://ZZ.ZZ.ZZ.ZZ/VirtualFolder/Service.svc that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details.

有任何想法嗎? 感謝並抱歉我的英語不好

編輯:

我制作了一個運行 ServiceHost 的控制台應用程序來替換 IIS,並且使用此配置它可以通過 Internet 工作

var svh = new ServiceHost(typeof (Service));
svh.AddServiceEndpoint(typeof (ServiceNamespace.IService), new NetTcpBinding(SecurityMode.None), "net.tcp://serverLocalIp:808");
svh.Open();

Console.WriteLine("SERVER - Running...");
stopFlag.WaitOne();

Console.WriteLine("SERVER - Shutting down...");
svh.Close();

Console.WriteLine("SERVER - Shut down!");

知道通過 Internet 運行相同服務的 IIS 有什么問題嗎? 本地工作。 謝謝

您還需要設置 IIS 以接收 Net.TCP 連接。

在您的 IIS 應用程序的Advanced Settings下,然后在Enabled Protocols下確保您有http,net.tcp請注意沒有空間,如果您有空間它將失敗。

http://blogs.msdn.com/b/swiss_dpe_team/archive/2008/02/08/iis-7-support-for-non-http-protocols.aspx

如果有一天您突然收到此錯誤,這與另一個進程劫持 net.tcp 端口有關。 就我而言,它是端口 808。這是我在大約 3 天后弄清楚的方法——這就是我現在所做的,谷歌並試圖找出其他人的問題而不是做我自己的工作。

無論如何:


  1. Net.TCP 取決於要運行的 2 個 Windows 服務。 轉到 services 並找到Net.Tcp Listener AdapterNet.Tcp Port Sharing Service 如果您沒有看到它們,則此答案不適用於您。 這意味着您尚未在控制面板中激活該功能打開或關閉 Windows 功能 您會找到大量有關在線啟用內容的信息。
  2. 停止Net.Tcp 端口共享服務,然后在停止其他服務彈出窗口中單擊
  3. 重新啟動這兩個服務。
  4. 打開“事件查看器”>“Windows 日志”>“系統”,然后在“源”列中查看SMSvcHost 4.0.0.0 (您的版本可能不同)是否有任何錯誤。 我遇到了這個錯誤:嘗試偵聽站點“1”時,協議“net.tcp”的激活服務“NetTcpActivator”發生錯誤,因此該站點的協議暫時被禁用。 是的,謝謝MS! 您啟動了一項服務,但並未真正啟動它,只是向事件查看器添加了一條消息? 偉大的! 因為在windows服務啟動期間告訴我太難了,對嗎? 好吧,無論如何,讓我們繼續。
  5. 然后我需要根據上面 4 中的錯誤找出正在使用端口的內容。 所以我運行了以下命令(您可能需要在管理員模式下啟動命令提示符。)
    • 運行netstat -ano | findstr "808"並注意列中的數字。 這些是使用端口的進程 ID。
    • 運行任務列表 | 9 ,其中 9 將是上述步驟的進程 ID。
  6. 現在您知道使用端口的進程名稱,您需要谷歌並找出該進程的用途。 就我而言,它與使用端口 808 的英特爾圖形驅動程序有關: OneApp.IGCC.WinService.exe

這是有道理的,因為其他一些進程已經在使用端口 808,因此它不可用於Net.TCP


此時我有兩個選擇:

  1. 禁用該進程
  2. 也許看看我是否可以為它更改端口。

幸運的是,他們已經更新了驅動程序,所以我只是從這里下載並安裝了它。


重新啟動然后再次運行以下命令以確保 net.tcp 的端口可用:

  1. 運行netstat -ano | findstr "808"並注意列中的數字。 這些是使用端口的進程 ID。
  2. 運行任務列表 | 9 ,其中 9 將是上述步驟的進程 ID。 現在您應該看到我們想要的SMSvcHost.exe

簡單的答案,將 IIS 下的端口號 -> 編輯綁定 -> net.tcp 更改為其他內容。 我將其更改為 12345,這解決了我的問題。

這是與使用默認端口 808 的另一個進程相關的問題,如上面的帖子所述。 如果這沒有幫助,請檢查上面的答案和休耕程序。

暫無
暫無

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

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