簡體   English   中英

WCF net.tcp - 目標計算機拒絕連接

[英]WCF net.tcp - Connection refused by target machine

我在Windows 8 x 64以及Windows 7 x 64操作系統上遇到此問題。 我有一個簡單的WCF服務,它使用net.tcp綁定。

我已經按照許多文章編寫了這個簡單的服務,包括MSDN上的以下內容: 托管和使用WCF服務

我的服務和配置文件完全如上文所述。

使用InstallUtil.exe作為Windows服務安裝此WCF服務后,我可以看到服務正確安裝並運行沒有任何錯誤。 我試圖在Windows服務的OnStart和OnStop方法上添加跟蹤,但沒有發現任何錯誤。 一旦我嘗試從另一個解決方案引用此端點,我就會收到以下錯誤。

無法連接到net.tcp:// localhost:8523 / Inbound。 連接嘗試持續時間跨度為00:00:00.9531494。 TCP錯誤代碼10061:無法建立連接,因為目標計算機主動拒絕它127.0.0.1:8523。

我已經通過互聯網嘗試了與此問題相關的大部分帖子,並且我嘗試打開防火牆,卸載防病毒軟件,嘗試不同的端口,明確為防火牆中的這些端口創建入站和出站規則等。仍然我不是能夠訪問承載基於net.tcp的WCF服務的Windows服務。 我的TCP端口共享服務和TCP列表器適配器服務已打開,我還打開了運行這些TCP服務所需的必要Windows功能。

我可以看到的一件事是,我總是可以在另一個項目的同一個解決方案中訪問此服務,因為Visual Studio在我嘗試引用此服務時會立即創建一個Wcf服務主機(WcfSvcHost),該服務會查找當前所有項目中的所有端點解決方案並加載它們。 只要該主機正在運行,我就可以在另一個解決方案中引用此服務而不會出現問題。

托管我的服務的Windows服務也與給定的代碼相同。 顯然,這會創建ServiceHost的實例並運行它。 我已經通過一些日志驗證了這一點,它在服務啟動時成功執行。 但是,當我的服務啟動時,我無法在任務管理器中看到此進程正在運行。 當我在同一個解決方案中調試或嘗試在上面提到的相同解決方案中引用時,我可以在Visual Studio運行時看到此服務。

現在我的問題是,我應該在我的服務啟動時在任務管理器中看到這個WcfSvceHost服務嗎? 我相信我應該。 如果我錯了,請糾正我。

我是否需要授予我的Windows服務任何特殊權限才能運行此ServiceHost,或者問題是否完全不同? 我忽略了一些非常明顯的東西嗎? 任何幫助將受到高度贊賞。 謝謝。

這是我的配置文件。

<system.serviceModel>
<bindings />
<client />
<services>
  <service name="MyWcfServiceLibrary.WCFService">
    <endpoint address="" binding="netTcpBinding" bindingConfiguration="" name="TCPEndPoint" contract="MyWcfServiceLibrary.IWCFService">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration="" name="mexEndPoint" contract="IMetadataExchange" />
    <host>
      <baseAddresses>
        <add baseAddress="net.tcp://127.0.0.1:8523/MyWCFService" />
      </baseAddresses>
    </host>
  </service>
</services>
<behaviors>
  <serviceBehaviors>        
    <behavior name="">
      <serviceMetadata httpGetEnabled="false" httpsGetEnabled="false" />
      <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
  </serviceBehaviors>
</behaviors>
</system.serviceModel>

讓我們通過淘汰來調試。 你啟用了端口共享嗎? 這是為了跨多個進程共享TCP端口。根據Microsoft“此服務作為WCF的一部分安裝,但默認情況下不啟用該服務作為安全預防措施”。

以下是如何使用MMC啟用Net.TCP端口共享服務

  1. 從“開始”菜單中,打開“服務管理控制台”,方法是打開“命令提示符”窗口並鍵入services.msc,或打開“運行”並在“打開”框中鍵入services.msc。
  2. 在服務列表的“名稱”列中,右鍵單擊“Net.Tcp端口共享服務”,然后從菜單中選擇“屬性”。
  3. 要啟用服務的手動啟動,請在“屬性”窗口中選擇“常規”選項卡,然后在“啟動類型”框中選擇“手動”,然后單擊“應用”。
  4. 要啟動該服務,請在“服務狀態”區域中單擊“開始”按鈕。 現在,服務狀態應顯示為“已啟動”。
  5. 要返回服務列表,請單擊“確定”,然后退出MMC控制台。

您也可以在此配置中啟用NetTcpBinding。

<system.serviceModel>
  <bindings>
    <netTcpBinding name="portSharingBinding" 
                   portSharingEnabled="true" />
  </bindings>
  <services>
    <service name="MyService">
        <endpoint address="net.tcp://localhost/MyService"
                  binding="netTcpBinding"
                  contract="IMyService"
                  bindingConfiguration="portSharingBinding" />
    </service>
  </services>
</system.serviceModel>

如果啟用了端口共享服務並且您手動啟動它,請檢查端口8523上是否正在運行另一個應用程序。您可以在命令提示符中使用Netstat -a,也可以從以下地址使用TCPView。 套裝軟件

暫無
暫無

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

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