获取RAW XML以及格式错误的XML语法调用

本文关键字:XML 语法 错误 调用 RAW 获取 格式 | 更新日期: 2023-09-27 18:04:00

我创建一个简单的DispatchMessageInspector。问题是当XML格式不正确时不会调用检查器。有可能得到RAW XML也格式错误的XML语法调用?

public class WcfMessageDebugger : IDispatchMessageInspector, IServiceBehavior
{
    /// <summary>
    /// Log4net logger
    /// </summary>
    private ILogger Logger { get; set; }
    public WcfMessageDebugger(ILogger logger)
    {
        Logger = logger;
    }
    object IDispatchMessageInspector.AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, IClientChannel channel, InstanceContext instanceContext)
    {
        if (Logger != null)
        {
            var textMessage = request.ToString();
            // HERE NOT PASS WHEN XML IS MALFORMED
            Logger.Debug(textMessage);
        }
        return null;
    }
    void IDispatchMessageInspector.BeforeSendReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
    {
        if (Logger != null)
        {                
            Logger.Debug(reply.ToString());
        }
    }      
    public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, System.Collections.ObjectModel.Collection<ServiceEndpoint> endpoints, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
    { 
        // non necessario  
    }
    public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
    {
        foreach (ChannelDispatcher dispatcher in serviceHostBase.ChannelDispatchers)
        {
            foreach (var endpoint in dispatcher.Endpoints)
            {
                var debugger = new WcfMessageDebugger(Logger);
                endpoint.DispatchRuntime.MessageInspectors.Add(debugger);
            }
        }
    }
    public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
    {            
    }
}

我也改变了web的选项。配置没有结果

<diagnostics>
  <messageLogging
       logEntireMessage="true"
       logMalformedMessages="true"
       logMessagesAtServiceLevel="true"
       logMessagesAtTransportLevel="true"/>
</diagnostics>

获取RAW XML以及格式错误的XML语法调用

是的,但是你必须作为IIS模块来做。编写一个自定义HTTP模块,它将捕获所有异常,然后让模块在遇到格式错误的XML时做出反应。看看我回答的这个关于如何做到这一点的问题。