2016-11-14 9 views
8

私はC#アプリケーションからWebサービスを呼び出すようにしようとしていますが、私は例外を取得しています:(Windows Mobileから)System.Web.Services.Protocols.SoapHttpClientProtocol.invokeをデバッグ/トレースする方法は?

InvalidOperationException 
client found response content type of 'text/html; charset=utf-8', but expected 'text/xml' 

にはどうすればいいの要求とREPONSEメッセージ国連URLを見ることができますか?私のサービスはデスクトップ上で動作しますが、クライアントはWindows Mobile CE 6.x上で動作し、モバイルデバイスはUSBを使用してデスクトップに接続されます。 Probabilyそれが私がWiresharkやFiddlerのHTTPトラフィックを見ない理由です(私は両方を試しました)。サービスは機能します - 私はPostmanを使ってそれをチェックできます(メソッドは正しい結果のXMLを返します)。

+0

htmlを返すWebサービスは、エラーがあったことを意味する可能性があります。したがって、サーバーの応答はxmlではなくエラーページです。サーバーで起こったことを記録することができれば役に立ちます。 – derloopkat

+0

携帯デバイスのプロキシとしてdev-machineを使用して、Fiddlerの使用を有効にすることはできますか? – martennis

答えて

3

これは間違いですが、IIS内で既定のドキュメントを使用していますか?私はおそらくではないはずですが、Webサービスのサイト用のデフォルトドキュメントを設定し、短縮したアドレスにServiceReferenceを指定したときには実行できましたが、ローカルでしか実行できませんでした。さもなければ、私は同じ "XMLの代わりにHTML"エラーを受け取ります。

私の場合は修正はもはやサービス参照に短縮URLを参照していない、との完全なURLを入力しました(別名、サイトの既定のドキュメントのプロパティを使用していない。)

+0

私は元の質問は、SOAPメッセージの出入りを印刷することだと思います。うまくいけばあなたの答えはあまりにも役立ちます! – morhook

+0

はい、この仲間の根本的な問題を解決しようとしているあなたには恥ずかしいです。それは、彼の質問に対するコメントとしてこれをしたはずです。 – STLDeveloper

+2

さて、私が何をしたのかという理由があります。彼の質問は*問題をデバッグすることでした...しかし、私のコメントは彼の問題の修正があったかもしれません(デバッグ時間を節約するかもしれません)。私はそれが私が走った1日の開発時間私は非常に似たような状況(ローカルで働いていて、サービス参照を取得/更新するために非ローカルで作業したが、実際に実行したときにローカルではない)と全く同じエラーメッセージです。Ehn - それが彼を助けないなら、将来他の誰かを助ける良いチャンスがある。 :-) – Kevin

4

あなたは変えることができます内部的にHTTP呼び出しを行うライブラリのデバッグでは(私の場合はHTTPSなので、wireshark経由での検査は不可能です)。

あなたのapp.configに追加する必要があります。

<system.diagnostics> 
    <trace autoflush="true"/> 
    <sources> 
     <source name="System.Net" tracemode="protocolonly" maxdatasize="1024"> 
     <listeners> 
      <add name="TraceFile"/> 
     </listeners> 
     </source> 
    </sources> 
    <sharedListeners> 
     <add name="TraceFile" type="System.Diagnostics.TextWriterTraceListener" 
     initializeData="trace.log"/> 
    </sharedListeners> 
    <switches> 
     <add name="System.Net" value="Verbose"/> 
    </switches> 
</system.diagnostics> 

これはtrace.logどこexeファイルの実行を追加します。あなたのサービスがどこで実行されているのか分からなければ、非相対パスを設定できるはずです。

また、出力ウィンドウ(出力コンソールではありません)でVisual Studio内でコードを実行すると、同じログが追加されます。

p.s .:リクエストのヘッダーと応答と情報のオープンとクローズに関する情報(私の場合はHTTPS)が必要な場合は、ログレベルを "情報"に変更できます。

2

SOAPクライアントをデバッグする最も簡単で最適な方法は、WebサービスまたはWebサービスクライアントとの間で送受信されるSOAPメッセージを記録するSOAP拡張を作成することです。

CodeProjectのは、これを適切に行うにはどのように良いのチュートリアルがあります:Efficient Tracing Using SOAP Extensions in .NET

そしてここでは、短いMSDNの記事です:How to: Implement a SOAP Extension

XML Spy SOAP Debuggerなどお金の価値がある商用SOAPデバッガアウトもありますSOAPSonarは検証と呼び出しを行います。

ところでPHPまたはJavaを使用する場合は、基本的に同じ方法を使用します。

関連する問題