我正在使用VS2010(.NET 4.5)中的Windows窗體C#應用程序。該應用程序使用Web服務。毫不奇怪,代理類從SoapHttpClientProtocol類繼承。數據(記錄)由與用於生成Web引用的wsdl捆綁在一起的xsd設置爲數據集。如何檢查C#.NET應用程序的SOAP輸出?
這裏是我遇到的問題: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旗艦版中的一些工具,我可以用它來檢查該應用程序的傳輸包?由於這個調用在SoapUI中工作得很好,當然有一些關於我的應用程序導致了這個問題......對吧?
如果您使用「添加服務引用」,那麼你就可以使用WCF跟蹤和消息跟蹤。 –