我正在 VS2010 (.NET 4.5) 中开发 Windows 窗体 C# 应用程序。该应用程序使用 Web 服务。不出所料,代理类继承自 SoapHttpClientProtocol 类。数据(记录)由 xsd 设置为数据集,该数据集与我用来生成 Web 参考的 wsdl 捆绑在一起。
这是我遇到的问题:当我使用我的应用程序时,其中一个 Web 服务 API 调用不起作用,但通过 SoapUI 调用相同的函数就可以了。SoapUI 中的调用结构基本上是 SOAP 信封,其中 API 调用的模式标签围绕用户名的值和包含数据记录中的字段的列表节点。我得到的错误是超级描述性的“内部错误(来自客户端)”。
代理类中的 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 调用都没有任何问题,包括那些将记录传递到我的应用程序的调用。
有什么方法可以利用 SoapUI 或 Visual Studio 2010 Ultimate 中的某些工具来检查应用程序正在传输的包?由于调用在 SoapUI 中工作得很好,肯定有一些关于我的应用程序的东西导致了这个问题......对吗?