我正在通過WSDL Webservice在我的項目.Net C#中調用一些調用,並且需要查看由WSDL發送和接收的XML請求和響應,任何人都可以幫助我如何讀取此信息?將XML讀取到WSDL中
1
A
回答
1
您可以在服務器或客戶機上使用fiddler來捕獲請求和響應。只需啓動它,它就會監控機器上的http流量。
1
您需要使用SoapExtensions。該方法將簡單地寫出包含web服務執行的所有通信的日誌文件。 XML將在那裏。
C#代碼:
// Define a SOAP Extension that traces the SOAP request and SOAP
// response for the XML Web service method the SOAP extension is
// applied to.
public class TraceExtension : SoapExtension
{
Stream oldStream;
Stream newStream;
string filename;
// Save the Stream representing the SOAP request or SOAP response into
// a local memory buffer.
public override Stream ChainStream(Stream stream)
{
oldStream = stream;
newStream = new MemoryStream();
return newStream;
}
// When the SOAP extension is accessed for the first time, the XML Web
// service method it is applied to is accessed to store the file
// name passed in, using the corresponding SoapExtensionAttribute.
public override object GetInitializer(LogicalMethodInfo methodInfo, SoapExtensionAttribute attribute)
{
return ((TraceExtensionAttribute) attribute).Filename;
}
// The SOAP extension was configured to run using a configuration file
// instead of an attribute applied to a specific XML Web service
// method.
public override object GetInitializer(Type WebServiceType)
{
// Return a file name to log the trace information to, based on the
// type.
return "C:\\" + WebServiceType.FullName + ".log";
}
// Receive the file name stored by GetInitializer and store it in a
// member variable for this specific instance.
public override void Initialize(object initializer)
{
filename = (string) initializer;
}
// If the SoapMessageStage is such that the SoapRequest or
// SoapResponse is still in the SOAP format to be sent or received,
// save it out to a file.
public override void ProcessMessage(SoapMessage message)
{
switch (message.Stage)
{
case SoapMessageStage.BeforeSerialize:
break;
case SoapMessageStage.AfterSerialize:
WriteOutput(message);
break;
case SoapMessageStage.BeforeDeserialize:
WriteInput(message);
break;
case SoapMessageStage.AfterDeserialize:
break;
default:
throw new Exception("invalid stage");
}
}
public void WriteOutput(SoapMessage message)
{
newStream.Position = 0;
FileStream fs = new FileStream(filename, FileMode.Append,
FileAccess.Write);
StreamWriter w = new StreamWriter(fs);
string soapString = (message is SoapServerMessage) ? "SoapResponse" : "SoapRequest";
w.WriteLine("-----" + soapString + " at " + DateTime.Now);
w.Flush();
Copy(newStream, fs);
w.Close();
newStream.Position = 0;
Copy(newStream, oldStream);
}
public void WriteInput(SoapMessage message)
{
Copy(oldStream, newStream);
FileStream fs = new FileStream(filename, FileMode.Append,
FileAccess.Write);
StreamWriter w = new StreamWriter(fs);
string soapString = (message is SoapServerMessage) ?
"SoapRequest" : "SoapResponse";
w.WriteLine("-----" + soapString +
" at " + DateTime.Now);
w.Flush();
newStream.Position = 0;
Copy(newStream, fs);
w.Close();
newStream.Position = 0;
}
void Copy(Stream from, Stream to)
{
TextReader reader = new StreamReader(from);
TextWriter writer = new StreamWriter(to);
writer.WriteLine(reader.ReadToEnd());
writer.Flush();
}
}
// Create a SoapExtensionAttribute for the SOAP Extension that can be
// applied to an XML Web service method.
[AttributeUsage(AttributeTargets.Method)]
public class TraceExtensionAttribute : SoapExtensionAttribute
{
private string filename = "c:\\log.txt";
private int priority;
public override Type ExtensionType
{
get { return typeof(TraceExtension); }
}
public override int Priority
{
get { return priority; }
set { priority = value; }
}
public string Filename
{
get
{
return filename;
}
set
{
filename = value;
}
}
}
在你的web.config:
<webServices>
<soapExtensionTypes>
<add type="ClassPath.To.Your.TraceExtension, Namespace.Containing.WebserviceCalls" priority="1" group="1"/>
</soapExtensionTypes>
</webServices>
這裏描述的解決方案:
soap extension to log my webservices
或
How to trace ScriptService WebService requests?
或
相關問題
- 1. 將XML讀取到PHP中
- 2. 讀取XML格式的WSDL文件
- 3. 將XML讀取到DataTable
- 4. 使用Linq將XML讀取到XML
- 5. 將XML讀取到字典中
- 6. 將XML文件讀取到HTML
- 7. 動態地將XML讀取到Datatable
- 8. 將xml導入到xml中並使用actionscript讀取它3
- 9. WCF讀取MEX端點WSDL
- 10. 了SoapUI無法讀取WSDL
- 11. Python讀取wsdl不工作
- 12. 將XML文件讀取
- 13. 在瀏覽器中讀取wsdl文件
- 14. 讀取CDATA與LINQ到XML
- 15. 讀取XML元素到Excel
- 16. 讀取XML到數據表
- 17. 獲取無法讀取WSDL錯誤
- 18. 將本地xml文件讀取到Javascript中的字符串中
- 19. 與LINQ讀取XML文件到XML
- 20. LINQ到XML,讀取XML文件
- 21. 將XML導入到數據集或使用XPath讀取XML?
- 22. 讀取XML文件到結構中
- 23. 在XML中轉換XML到JSON後讀取XML節點
- 24. 如何將XML字符串從數據庫讀取到XMLTextReader中?
- 25. 將XML文件讀取到已存在的數據庫表中
- 26. 將XML讀取到包含列表的類中<Class>
- 27. 將XML讀取到xsd.exe生成的類中。好主意?
- 28. C#將XML元素讀取到2個單獨的列表中
- 29. 讀取xml文件並將其內容加載到數組中
- 30. 將XML讀取到DataTable中。需要匹配架構
您可以逐步直通代碼並調用WebService的方法後,也就是希望,如果你已經在你的項目中正常消耗它,你可以調試和做一個快速監視該變量看到返回的XML .. – MethodMan 2012-02-09 18:16:53
當你說「WSDL Web服務」,你的意思是一個.asmx服務? – 2012-02-09 20:52:38