【发布时间】:2016-10-15 00:37:48
【问题描述】:
问题:作为调试有关某些验证问题的问题的一部分,我想阅读 WCF Web 服务的 XML 请求。
显然,这比看起来更困难,在这方面的任何帮助将不胜感激。以下是我已经尝试过的。很像 StackOverflow (link) 上类似问题的答案。
我的解决方案:我创建了客户端,设置了 Web 服务提供者提供的端点。我已将客户端凭据添加为端点行为。就在我调用服务之前,我添加了另一个端点行为以将请求和响应写入 XML 文件。唉,没用。
对网络服务的简单调用:
public SaveAvailabilityAssessmentResponseType SaveAvailabilityAssessment(SaveAvailabilityAssessmentRequestType request)
{
Client.Endpoint.Behaviors.Add(new CustomEndpointBehavior());
return Client.SaveAvailabilityAssessment(_ocesCertHeader, _activeOrganisationHeader, request);
}
这里是 CustomEndpointBehavior 类(简化了一点):
public class CustomEndpointBehavior : IEndpointBehavior
{
public void ApplyClientBehavior(ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.ClientRuntime clientRuntime)
{
clientRuntime.MessageInspectors.Add(new MessageExpector());
}
}
这是 MessageExpector 类:
internal class MessageExpector : IClientMessageInspector
{
public void AfterReceiveReply(ref Message reply, object correlationState)
{
using (var sw = new StreamWriter(@"C:\temp\response.xml"))
{
sw.WriteLine(reply);
}
}
public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
using (var sw = new StreamWriter(@"C:\temp\request.xml"))
{
sw.WriteLine(request);
}
return new object();
}
}
谁能告诉我我错过了什么?
编辑: 进一步调试显示,CustomEndpointBehavior 中的代码尚未激活。就好像 customendpoint 没有添加到客户端的端点行为中一样。但怎么可能呢?
【问题讨论】:
-
您有有效的端点吗?你有要求吗?要使代码正常工作,您需要使用 HttpRequest 或使用 Create() 方法的 HttpWebRequest 初始化请求。
-
是的,我有一个有效的端点(客户端上的其他方法按预期工作)和一个请求。我假设您在调用客户端方法时指的是请求变量。
-
您正在向同一个文件写入两次。是否要附加数据?我想知道您是否保存的是请求而不是响应。
-
请求写入C:\temp\request.xml,响应写入C:\temp\response.xml。
-
您使用的是什么端口号?尝试 10,000 以上的端口号。低于 1,000 的低端口号通常会被病毒检查程序和防火墙阻止。您可以使用以下命令从 cmd.exe 检查端口的状态:netstat -a。确保该端口没有被其他应用程序使用。
标签: c# xml web-services wcf soap