2011-12-19 4 views
3

私は既にいくつかのWCF + Windowsサービスをテストしており、リモートのdevマシン上でWindowsサービスとして動作するように正しく動作します。 1つを除いて。"Add Service Reference> Discover"の作業を行うための最小構成

デバッグするために、ビルトインの「Add Service Reference」を使用してWCFを(Windowsサービスなしで)ホストし、ビジュアルスタジオでホストしました。

とにかく、私のサービスを発見するためのサービス参照の追加はできません。

私はWindoes Servicesを使用しているので、私はTCPのものを使用しています。これは、すべて私がサービス参照を追加していWinFormsのアプリで私が行っているいくつかのもの、です:

プロジェクト]> [プロパティ]> [デバッグ]> [コマンドライン引数の追加:/client:"WcfTestClient.exeを」が、exeファイルのdoesn実行しないでください。

そして、私のapp.configを

<?xml version="1.0"?> 
<configuration> 
    <system.serviceModel> 
    <client> 
     <endpoint address="net.tcp://localhost:32279/SYNC" binding="netTcpBinding" 
     bindingConfiguration="tcpSyncBindingConfig" contract="Company.Data.Sync.ILocalCacheSyncContract" 
     name="tcpSyncClientEP" /> 
    </client> 
    <bindings> 
     <netTcpBinding> 
     <binding name="tcpSyncBindingConfig" maxReceivedMessageSize="6553600" /> 
     </netTcpBinding> 
     <mexTcpBinding> 
     <binding name="tcpMexBindingConfig" /> 
     </mexTcpBinding> 
    </bindings> 
    <services> 
     <service behaviorConfiguration="svcBehavior" name="Company.Data.Sync.Services.LocalCacheSyncService"> 
     <endpoint address="net.tcp://localhost:32279/Sync" binding="netTcpBinding" 
      bindingConfiguration="tcpSyncBindingConfig" name="tcpSyncListenEP" 
      contract="Company.Data.Sync.Services.ILocalCacheSyncContract" /> 
     <endpoint address="net.tcp://localhost:32279/Sync/mex" binding="mexTcpBinding" 
      bindingConfiguration="tcpMexBindingConfig" name="tcpMexEP" contract="IMetadataExchange" /> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="svcBehavior"> 
      <serviceMetadata httpGetEnabled="false" /> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 
</configuration> 

サイドノート:ServiceOperation例SyncContextためMicrosoft.Synchronization.Data.xxxのsutffを戻ってきています。私はWinformsに参照を追加する必要がありますか?または、「Add Service Reference」が私のために追加しますか?サービスとコントラクトは、ローカルデータベースキャッシュテンプレートによって生成されます。 おそらく問題に関連していません。

答えて

4

掲示した後、私は答えを探し続け、これは私が働くことを実験です:

プロジェクトファイル自体を例えばは、 * .csproj for C#プロジェクトには、Visual Studio用のプロジェクトのチェックを開始するためのWCF用ProjectTypeGuidが含まれている必要があります。

<ProjectTypeGuids>{3D9AD99F-2412-4246-B90B-4EAA41C64699};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> 

さらにGUIDはhttp://www.mztools.com/articles/2008/mz2008017.aspxにあります。 (ありがとうmztools!)

WCFプロジェクトは複数のサービスを持つことができ、それぞれの設定はプロジェクトのApp.Configで定義されている必要があります。各サービスは異なるmexエンドポイントアドレスを持つ必要があります。サービスは、serviceMetadata拡張が定義された単一のサービス動作を共有することもできます。 Mexエンドポイントは動作やバインディング設定を必要としません。しかし、IMxエンドポイント契約をIMetadataExhchangeに設定することを忘れないでください。

TCP mexの場合、serviceMetadata> HttpGetEnabledをfalseに設定する必要があります。

私はこれが最小設定だと思います。

0

右、あなたのPC上でホストし、右クリックしてデバッグを行きたいサービスをクリックして[スタート]> [新規インスタンス

その後、あなたの他のアプリケーションを(私は同じソリューションを想定)に行くと、それはで実行されているURLをコピー。

上記の同じ方法で起動し、両方のプロジェクトをローカルマシンでデバッグできます。

これはあなたがやろうとしていることです。それが他のものだったら私に知らせてください。

+0

この方法は、私が持っているdllのうち1つでのみ動作します。 DLLの要件はありますか?たとえば、dllには1つのサービスしか存在できません。それは彼が実際に私は仕事にどちらか一方を取得思っ@jgauffinとにかく、私は私のservices' – Jake

+0

「...クラスライブラリの出力タイプが起動できない」を与えるの両方になります作業。 – jgauffin

+1

を発見するためにサービス参照を追加取得することはできません '言っ – Jake

関連する問題