2013-04-16 70 views
0

我正在使用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中工作得很好,當然有一些關於我的應用程序導致了這個問題......對吧?

+0

如果您使用「添加服務引用」,那麼你就可以使用WCF跟蹤和消息跟蹤。 –

回答

0

RequestBin(http://requestb.in/)可以很容易地觀看的http請求的內容的工具。

只需創建一個RequestBin和配置應用程序的端點指向它,然後從你的應用程序觸發一個請求,它會在你RequestBin可見。

如果您有興趣捕獲請求和響應消息,您也可以嘗試使用Fiddler(http://fiddler2.com/),但我發現RequestBin更快更簡單。