我正在通过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读取到Datatable
- 3. WCF读取MEX端点WSDL
- 4. 在浏览器中读取wsdl文件
- 5. 读取CDATA与LINQ到XML
- 6. 读取XML到数据表
- 7. 与LINQ读取XML文件到XML
- 8. 如何将XML字符串从数据库读取到XMLTextReader中?
- 9. 如何将本地xml文件读取到字符串中
- 10. 将XML读取到xsd.exe生成的类中。好主意?
- 11. 读取xml文件并将其内容加载到数组中
- 12. 将XML读取到具有文件中多个表的DataSet
- 13. 将SOAP请求中的XML属性读取到WCF服务
- 14. 将XML文件读取到已存在的数据库表中
- 15. CURL将XML数据发送到soap服务返回wsdl在php中的XML
- 16. 读取XML injava
- 17. 读取的XML
- 18. 使用c#.Net读取WebService Wsdl网址
- 19. 使用php读取wsdl文件
- 20. ServiceDescription没有读取安全的wsdl
- 21. 无法从服务读取WSDL
- 22. C#中的XML CDATA读取#
- 23. 从c#中读取XML#
- 24. 在SSRS中读取XML
- 25. 在JSON中读取XML值
- 26. 从xml中读取javascript
- 27. 在Java中读取CDATA XML
- 28. PLSQL从XML中读取值?
- 29. 在PHP中读取SOAP XML
- 30. 在C中读取XML#
您可以逐步直通代码并调用WebService的方法后,也就是希望,如果你已经在你的项目中正常消耗它,你可以调试和做一个快速监视该变量看到返回的XML .. – MethodMan 2012-02-09 18:16:53
当你说“WSDL Web服务”,你的意思是一个.asmx服务? – 2012-02-09 20:52:38