web-dev-qa-db-ja.com

WCFサービスメッセージをデバッグできません

WCFサービスとクライアントを備えたVisual Studio 2008ソリューションがあります。

クライアントを実行し、サービスからメソッドを呼び出すと、「 'Home.Service'を自動的にデバッグできません。リモートプロシージャをデバッグできませんでした。これは通常、サーバーでデバッグが有効になっていないことを示します。 」

私はググって、以下を試しました。

<system.web>
   <compilation debug="true" />
</system.web>

クライアントとサーバーの両方のapp.configに追加されています。

また、プロジェクトがデバッグモードでコンパイルされていることも確認しました。

他に何がこのメッセージを引き起こしているのでしょうか?

編集:フィードバックの質問に基づいて詳細情報を追加しました

  • WsHttpBindingを使用しています
  • 設定しました

    <serviceDebug includeExceptionDetailInFaults="true"/>
    
  • 使ってます

    var service = new HomeReference.HomeServiceClient();
    service.ClientCredentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials;
    

残念ながら、サービスでメソッドを初めて呼び出したときにエラーが表示されます。メッセージボックスを閉じても、アプリケーションは引き続き機能します。ただし、サーバーにスローされた例外がクライアントに伝達されていない場合(例外はあると思いますか?)

31
Frode Lillerud

私の場合、問題はクライアントとサーバーのセキュリティ設定の不一致であることが判明しました。私はこのようなカスタムバインディングを使用していました:

<customBinding>
    <binding name="AuthorisedBinaryHttpsBinding" receiveTimeout="00:03:00" sendTimeout="00:03:00">
      <!-- this next element caused the problem: -->
      <security authenticationMode="UserNameOverTransport">
      </security>
      <binaryMessageEncoding>
        <readerQuotas maxDepth="100" maxStringContentLength="1000000"
          maxArrayLength="655360000" />
      </binaryMessageEncoding>
      <httpsTransport />
    </binding>
  </customBinding>

上記で強調表示したセキュリティ要素を削除すると、「自動的にデバッグできません」というメッセージが表示されなくなりました。

問題を解決するために、最初に WCFトレース をオンにしました。これは、WCFがMessageSecurityExceptionをスローしていることを示していました。

セキュリティプロセッサは、メッセージでセキュリティヘッダーを見つけることができませんでした。これは、メッセージがセキュリティ保護されていない障害であるか、通信している当事者間にバインディングの不一致があるためである可能性があります。これは、サービスがセキュリティ用に構成されていて、クライアントがセキュリティを使用していない場合に発生する可能性があります。

そのため、クライアント側のバインド設定を確認する必要がありました。必要なセキュリティ要素をカスタムバインディングに追加していないことがわかりました。コードでこれを行っていたので、次のものが必要でした(3行目に注意してください)。

  var binding = new CustomBinding(
      binaryEncoding,
      SecurityBindingElement.CreateUserNameOverTransportBindingElement(),
      new HttpsTransportBindingElement { MaxReceivedMessageSize = MaxMessageSize, });

Visual Studioがそのエラーを表示した理由については、私にはわかりません。バグのように見えます。

13
Samuel Jack

私はこのまったく同じエラーと1時間以上もの間戦っていました。それはあなたにいくつかの時間を節約するかもしれないので、それを試してみてください。

39
Exist

サービスへの自動アタッチには、次の制限があります。

  • サービスは、デバッグするVisual Studioソリューションの一部である必要があります。

  • サービスはホストされている必要があります。これは、Webサイトプロジェクト(ファイルシステムおよびHTTP)、Webアプリケーションプロジェクト(ファイルシステムおよびHTTP)、またはWCFサービスライブラリプロジェクトの一部である場合があります。 WCFサービスライブラリプロジェクトは、サービスライブラリまたはワークフローサービスライブラリのいずれかです。

  • サービスはWCFクライアントから呼び出す必要があります。

  • App.configまたはWeb.configファイルで次のコードを使用して、デバッグを有効にする必要があります。

    <system.web>
      <compilation debug="true" />
    </system.web>
    

WCFデバッグの制限を参照してください

さらに、両方のプロジェクト(クライアントとサービス)が同じソリューションにあるが、異なるプロセスで実行される場合(たとえば、ローカルIIS開発用サーバーを使用しており、Webアプリケーションを実行している場合) 異なるアプリケーションプールが使用するサービス)では、「複数の起動プロジェクト "ソリューションの場合(ソリューションプロパティ->スタートアッププロジェクト)、デバッガーは両方に接続できます。

デバッグするたびにサービスブラウザーウィンドウが表示されないようにするには、サービスプロジェクトプロパティの[開始アクション]を[ページを開かないでください。外部アプリケーションからの要求を待ちます]に設定します。

これは個人的な経験からであり、他の人を助けるかもしれません。

8
Jorge Garcia

このエラーが表示されるもう1つの理由(そして私がそうだと思います)は、64ビットWindowsで実行している場合です。どうやらVisual Studioはx64デバッガーをサポートしていません。

これは、使用するアプリケーションのプラットフォームターゲットを変更することで回避できます。

プロジェクトのプロパティ->ビルド->「プラットフォームターゲット」を「x86」に変更します。

残念ながら、64ビットモードですべてを実行する必要があるように見えるWindows Azure開発AppFabricで実行しようとしているので、これは私にはうまくいきません!

6
Dave

私も同じ問題を抱えていました。私はクライアントとサービスの両方の設定ファイルを次のように変更しました

コンパイルデバッグはtrueに設定されます。

これでうまくいきました。

1
sriram

Visual Studio 2017でも同じ問題が発生しました。ソリューションフォルダーのルートにある非表示の.vsフォルダーを削除した後、再度デバッグすることができました。

0
Bobmonga

やってみました

    <serviceBehaviors>

  <serviceDebug includeExceptionDetailInFaults="true"/>
            </behavior>
        </serviceBehaviors>

デバッグ目的で?

編集:気にしない、私は質問を誤解したと思う

0
kd7

私の場合、問題はまったく異なるものであることが判明しました。 Webサービスのオペレーションの名前を変更し、クライアントを更新するのを忘れていました。何らかの理由で、これにより「自動的にデバッグできません...」エラーが発生しました。

0
T.J.Kjaer

Webサービスweb.configで、コンパイルデバッグがtrueに設定されていることを確認します。これで問題が解決するはずです!

0
joseph

同様の問題がありましたが、IISサイト/仮想ディレクトリでWindows認証が有効になっていないことが原因でした。

認証モードを匿名ではなく統合に設定してみましたか? http://msdn.Microsoft.com/en-us/library/x8a5axew(VS.80).aspx

0
mundeep

IISExpressとIISで同じポート番号が使用されている可能性もあります。 Visual StudioおよびIISExpressでWCFアプリケーションを開発していて、同じアプリケーションをローカルにインストールしている場合IIS IIS =およびIISExpress。同じポート番号を使用すると、このエラーメッセージが表示されます。

0
GunnarS