【问题标题】:How to get request before call to webservice如何在调用 web 服务之前获取请求
【发布时间】: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


【解决方案1】:

您可以在不修改代码的情况下配置消息记录。 Here's a link to documentation。 您可以使用SvcTraceViewer.exe 来查看此日志

【讨论】:

  • 我试图这样做,但到目前为止我没有运气。我可以看到动作,但看不到与发送请求相关的 xml :(
  • 你确定你点击的是消息跟踪吗?
  • 有理由确定。我得到一个基本信息块和一个消息日志块。当我去查看 XML 时,我得到了相同的信息,但不幸的是,不是 requestdata 本身
猜你喜欢
  • 2011-07-26
  • 2012-12-12
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多