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