2012-01-21 20 views
2

ローカルマシンにWindowsサービスとしてホストされているWCFサービスがあります。 「net.tcp:今、私は(私の地元のdevのマシン上で再び)クライアントにサービス参照を追加しようとしているが、私はエラーnet tcp wcfサービスへのサービス参照を追加できません

メタデータを取得しています解決できない参照が含まれています//localhost:8523/Service1 'と入力します。 net.tcp:// localhost:8523/Service1に接続できませんでした。接続の試行は、 00:00:02.0011145の時間間隔で続きました。 TCPエラーコード10061:ターゲットマシンが積極的に私は、Windowsのファイアウォールが、私も実行8523を許可するようにWindowsファイアウォールの新しいルールを作成したポート8523.をブロックしていないことを確認

それを拒否したため接続なし を作ることができますポート。しかし、私が実行しているときnetstat -sp tcp私はポート8523を見つけることができないようです。しかしSerice1サービスの状態はサービスでSTARTに設定されています。これは、Windowsサービスプロジェクトのconfigファイル

サービス図書館

<system.serviceModel> 
    <services> 
    <service name="WcfServiceLibrary1.Service1"> 
     <endpoint 
      address="" 
      binding="netTcpBinding" bindingConfiguration="" 
      contract="WcfServiceLibrary1.IService1"> 
     <identity> 
      <dns value="localhost" /> 
     </identity> 
     </endpoint> 
     <endpoint 
      address="mex" 
      binding="mexTcpBinding" bindingConfiguration="" 
      contract="IMetadataExchange" /> 
     <host> 
     <baseAddresses> 
      <add baseAddress="net.tcp://localhost:8523/Service1" /> 
     </baseAddresses> 
     </host> 
    </service> 
    </services> 
    <behaviors> 
    <serviceBehaviors> 
     <behavior name=""> 
     <serviceMetadata httpGetEnabled="false" /> 
     <serviceDebug includeExceptionDetailInFaults="false" /> 
     </behavior> 
    </serviceBehaviors> 
    </behaviors> 
</system.serviceModel> 

コンフィグにある同じに見えます。

+0

コンソールアプリケーションでホストされている場合、同じ構成のサービスが期待どおりに機能していますか?イベントログでWindowsサービスからのエラーメッセージを確認しましたか?ファイアウォールを完全に無効にして、問題が発生しないようにすることもできます。 – Clemens

+0

サービスを開始すると、エラーで再び停止しないことが確実です(イベントログを使用したClemensの提案には、それが表示されます)。サービスビューを更新すると、サービスビューが再開したことを示す可能性があります。 –

+0

@Clemensイベントログを確認しましたが、エラーメッセージはありません。サービスが正常に開始されたという情報が表示されます。私は完全にWindowsファイアウォールを無効にし、残念ながらまだ同じエラーがあります。 – Michael

答えて

4

マイケル、これは私は通常、WCFサービスのために使用することをバインディングnet.tcpです。

<bindings> 
     <netTcpBinding> 
      <binding name="TcpBinding" 
        receiveTimeout="Infinite" 
        sendTimeout="Infinite" 
        maxBufferSize="2147483647" 
        maxReceivedMessageSize="2147483647"> 
       <reliableSession inactivityTimeout="Infinite"/> 
       <security mode="None"/> 
      </binding> 
     </netTcpBinding> 
    </bindings> 

ご使用の構成に追加してみます

<service name="WcfServiceLibrary1.Service1"> 
    <endpoint  
     address=""  
     binding="netTcpBinding" bindingConfiguration="TcpBinding" 
     contract="WcfServiceLibrary1.IService1"> 
    ... 

はまた、私のサービスがServiceAccount.LocalSystemの下で実行されています。

チェック

のnetstat - AP TCP

サービスが受信しているかどうか。

EDIT:下記の私のサービスクラス。 Windowsサービスの現在のディレクトリは、プログラム可能にBaseDirectory、すなわち実行可能ファイルのディレクトリに設定されることに留意されたい。

public class Service : ServiceBase 
{ 
    public static void Main() 
    { 
     Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory); 
     ServiceBase.Run(new Service()); 
    } 

    ... 
} 
+0

遅れて申し訳ありませんが、Clemensと同様に試しましたが、依然としてサービス用のクライアントを作成できていないようです。 – Michael

+0

サービスはポート8523でリッスンしていますか? – Clemens

+0

Nope Clemens、それは問題だ、私はポート8523が動作しているように見えないので、コンソールアプリケーションを使ってWindowsサービスを変更した。特にコンソールアプリケーションはサービスをホストしている。なぜなら、Windowsサービスとコンソールアプリケーションの両方が同じdllのサービスと同じ設定を使用しているからです。では、なぜコンソールアプリケーションを使用してサービスをホストすることができますが、Windowsサービス経由でホストすることはできませんか?すべての手がかりは? – Michael

1

動作を指定しましたが、名前を指定していません。ビヘイビアに名前を付け、サービスのbehaviorConfigurationを使用してそのビヘイビアをポイントします。

<service name="WcfServiceLibrary1.Service1" behaviorConfiguration="svc1behavior"> 

...

<serviceBehaviors> 
<behavior name="svc1behavior"> 
    <serviceMetadata httpGetEnabled="false" /> 
    <serviceDebug includeExceptionDetailInFaults="false" /> 
</behavior> 
</serviceBehaviors> 
+0

応答をありがとう、それを修正しましたが、それでも同じエラーが発生しました。 – Michael

+1

.NET4を使用している場合は、ビヘイビアブロックに名前を付ける必要があります。名前のないビヘイビアブロックは、サービスのデフォルトのビヘイビア設定として機能します。 –

+0

.NET 4.6プロジェクトで働いてくれてありがとう! – Doc

0

NetTcpリスナーアダプタサービスが実行されていることを確認します(ただし、コンソールアプリケーションでサービスをホストしている間は動作しますが、動作している必要があります)。

あなたのサービスが使用しているポートを見つけるには、

  1. タスクマネージャを開き
  2. [表示] - > [列の選択] - > [PIDをチェック - > OK
  3. PIDに注意し、あなたのサービスのプロセス名を探します
  4. は、コマンドプロンプトからfollowindコマンドを実行します。
0

netstat -ano | findstr *PID*は同じ問題を持っていました。トラブルシューティングの多くの後、私は私が奉仕プロジェクトでWeb.configにおけるサービスへの参照がありませんでしたがわかったので、私はWeb.configファイルにこれを追加しました:

<system.serviceModel> 
    <services> 
    <service name="serviceName" behaviorConfiguration="BasicServiceBehavior" > 
     <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/> 
     <endpoint address="" binding="basicHttpBinding" bindingConfiguration="BasicServiceBasicHttpBinding" contract="(I<nameofservice>)"/> 
    </service> 
    </services> 
</system.serviceModel> 

作成し、この再構築ソリューション(後インターフェイス)を開き、再公開します。そして、私は最終的に私の他のプロジェクトからサービス参照を追加することができました。

関連する問題