如何调试/跟踪System.Web.Services.Protocols.SoapHttpClientProtocol.invoke(来自Windows Mobile)?

Tom*_*omR 9 c# debugging trace web-services wireshark

我试图从C#应用程序调用Web服务,但我得到例外:

InvalidOperationException 
client found response content type of 'text/html; charset=utf-8', but expected 'text/xml'
Run Code Online (Sandbox Code Playgroud)

如何查看请求并响应URL的消息?我的服务在桌面上运行,但客户端在Windows Mobile CE 6.x上运行,移动设备使用usb连接到Dektop.事实上,这就是为什么我没有在Wireshark或Fiddler中看到HTTP流量的原因(我已经尝试了两种).服务工作 - 我可以使用Postman检查它(方法返回正确和有意义的结果XML).

mor*_*ook 6

您可以在内部进行HTTP调用的某些库上打开调试功能(在我的情况下,它们是HTTPS,因此无法通过wirehark进行检查)。

您应该添加到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>
Run Code Online (Sandbox Code Playgroud)

这将trace.log在您的exe的运行位置添加一个。如果您不知道服务在哪里运行,则应该可以使用非相对路径。

另外,在Visual Studio中在输出窗口(而不是输出控制台)中运行代码时,这将添加相同的日志。

ps:如果只需要请求和响应的标题以及有关打开和关闭连接的信息(在我的情况下为HTTPS),则可以将日志级别更改为“信息”。


Kev*_*vin 3

好吧,这听起来很奇怪,但是您是否在 IIS 中使用默认文档?我知道情况可能不应该如此,但是当我为我的 Web 服务站点设置默认文档并将我的 ServiceReference 指向缩短的地址时,它能够运行......但只能在本地运行。否则,我会得到同样的“Html 而不是 XML”错误。

在我的例子中,修复方法是不再引用服务引用中的缩短 URL,并键入完整的 URL(即不使用站点的默认文档属性。)

  • 嗯,我建议我这样做是有原因的。他的问题是关于调试问题...但我的评论是解决他的问题可能是什么(这可能会节省他一些调试时间)。我知道当我运行时,它耽误了我近一天的开发时间跨越它 - 就像我说的,这是我在极其相似的情况下收到的完全相同的错误消息(在本地工作,在非本地工作以获取/更新服务引用,但在实际运行时没有在非本地工作。) Ehn -如果这对他没有帮助,那么将来很有可能对其他人有帮助。:-) (2认同)