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/Release
vs2010 プロジェクトからフォルダーをコピーし、これを別のコンピューターの という名前のフォルダーに配置します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>
どこが間違っていますか?