1

Windows サービスをホストとして使用して net.tcp バインドで WCF を動作させる方法について、この MSDN チュートリアルを使用しました。

http://msdn.microsoft.com/en-us/library/ff649818.aspx

コールバックのために nettcp が必要ですが、IIS をホストとして使用したくありません。

このチュートリアルは私のコンピューターで 100% 動作し、私は自分のプロジェクト名とメソッドなどを使用して 2 番目のバージョンを作成しました。これも私のコンピューターで 100% 動作します - VS2010 から実行した場合と、InstallUtil を使用してサービスとして実行した場合の両方.

Juval Lowy の Metadata Explorer をダウンロードして、これを自分のコンピューターで実行すると、サービスが検出されました。(からwww.idesign.net)

これを別のコンピュータ、つまり本番サーバーで動作させることができません。また、これがサーバー関連の問題であるかどうかを確認するために、予備の PC にインストールしようとしました。これらのどちらにも VS2010 はありませんが、Windows サービスとして実行しているので問題ありません。

/bin/Releasevs2010 プロジェクトからフォルダーをコピーし、これを別のコンピューターの という名前のフォルダーに配置しますmyapp。サービス exeで実行InstallUtilし (コンピューターで実行したのと同じように)、正常にインストールされます。また、フォルダーのアクセス許可を変更して、NETWORK SERVICE に完全な権限を付与します。

次に、[コントロール パネル]、[管理サービス]、[サービス] でサービスを開始します。データベースにログを記録しており、サービス プロセスが開始されていることを確認しています。WCF ホステッド サービスが開始されるかどうかわかりません。

私のコンピューターでは、WCF ホステッド サービスが開始されるたびに、バルーン通知と、mex アドレスなどを確認できるウィンドウが表示されます。これは、他のコンピューターにインストールすると発生しません。

Juval Lowy のメタデータ エクスプローラーをターゲット マシンにインストールしましたが、コンピューターで行ったのとまったく同じアドレスを使用して無効なアドレスが表示されます (つまり、IP アドレスではなく localhost を参照します)。

他のコンピューターにインストールする方法論に何か問題があると思います。

関連するコードは次のとおりです。

if (myServiceHost != null)
            myServiceHost.Close();

myServiceHost = new ServiceHost(typeof(MyAppService));
myServiceHost.Open();

app.config:

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

どこが間違っていますか?

4

1 に答える 1

0

Net.TCP ポート共有サービスを有効にする必要がある場合があります。

Windows Communication Foundation (WCF) は、Net.TCP ポート共有サービスと呼ばれる Windows サービスを使用して、複数のプロセス間での TCP ポートの共有を容易にします。このサービスは WCF の一部としてインストールされますが、セキュリティ対策として既定では有効になっていないため、最初に使用する前に手動で有効にする必要があります。

于 2012-12-03T10:27:01.167 に答える