如何检查c#的SOAP输出.网络应用程序

本文关键字:SOAP 输出 网络 应用程序 何检查 检查 | 更新日期: 2023-09-27 18:09:24

我正在VS2010中开发一个windows窗体c#应用程序。NET 4.5)。应用程序使用web服务。毫无疑问,代理类继承自SoapHttpClientProtocol类。数据(记录)由xsd设置为数据集,该xsd与我用于生成web引用的wsdl捆绑在一起。

这是我遇到的问题:当我使用我的应用程序时,其中一个web服务API调用不工作,但通过SoapUI调用相同的函数工作得很好。SoapUI中调用的结构基本上是带有API调用的模式标签的SOAP信封,其中包含用户名的值和包含数据记录中的字段的列表节点。我得到的错误是超级描述性的"内部错误(来自客户端)"。

代理类中的API调用:

    [
System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://localhost:8080/updateRecord", RequestNamespace="http://www.<redacted>.com/schemas", ResponseNamespace="http://www.<redacted>.com/schemas", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
        [return: System.Xml.Serialization.XmlArrayAttribute("issues", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=true)]
        [return: System.Xml.Serialization.XmlArrayItemAttribute("list", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=false)]
        public qaIssue[] updateRecord([System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=true)] string username, [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=true)] dataRecord record) {
            object[] results = this.Invoke("updateRecord", new object[] {
                        username,
                        record});
            return ((qaIssue[])(results[0]));
        }

这个包应该是这样的,至少根据SoapUI:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sch="http://www.<redacted>.com/schemas">
   <soapenv:Header/>
   <soapenv:Body>
      <sch:updateCitation>
         <!--Optional:-->
         <username>LikeI'dLeaveMyUsernameInHere</username>
         <!--Optional:-->
         <record>
          <reportDate>2013-04-15-04:00</reportDate>
          <reportType>Temporary</reportType>
....
         </record>
      </sch:updateRecord>
   </soapenv:Body>
</soapenv:Envelope>

还有一个函数也试图将数据记录发送到web服务。但是,除了这两个函数之外,我对任何其他API调用都没有任何问题,包括那些将记录传递到我的应用程序的API调用。

有没有办法利用SoapUI或Visual Studio 2010 Ultimate中的一些工具,我可以用它来检查应用程序正在传输的包?由于调用在SoapUI中工作得很好,肯定有一些关于我的应用程序导致这个问题……对吧?

如何检查c#的SOAP输出.网络应用程序

RequestBin (http://requestb.in/)是一个方便查看http请求内容的工具。

只要创建一个RequestBin并配置你的应用的端点指向它,然后从你的应用中触发一个请求,它将在你的RequestBin中可见。

如果您对捕获请求和响应消息感兴趣,也可以尝试使用Fiddler (http://fiddler2.com/),但我发现RequestBin更快更容易。