注意:使用 .NET 2.0 和 VS2005 作为 IDE
大家好,
我正在将 web 服务调用记录到我们的数据库中,最后使用从另一个项目移植过来的非常精简的实现来配置和运行 SoapExtension。我已经在配置文件中设置了它,因此它将适用于所有方法。当我调用我的 web 服务,soap 扩展触发时,当 SoapServerMessage 尝试调用其 MethodInfo 属性时会抛出 NullPointerException:
System.Web.Services.Protocols.SoapException: There was an exception running the extensions specified in the config file.
---> System.NullReferenceException: Object reference not set to an instance of an object.
at System.Web.Services.Protocols.SoapServerProtocol.get_MethodInfo()
at System.Web.Services.Protocols.SoapServerMessage.get_MethodInfo()
at MyService.SOAPLoggingExtension.LogInput(SoapMessage message)
at MyService.SOAPLoggingExtension.ProcessMessage(SoapMessage message)
at System.Web.Services.Protocols.SoapMessage.RunExtensions(SoapExtension[] extensions, Boolean throwOnException)
at System.Web.Services.Protocols.SoapServerProtocol.Initialize()
--- End of inner exception stack trace ---
at System.Web.Services.Protocols.SoapServerProtocol.Initialize()
at System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing)
在 ProcessMessage(SoapMessage) 的 BeforeDeserialize 阶段调用 LogInput 方法:
SoapMessageStage.BeforeDeserialize:
CopyStream(_oldStream, _newStream);
_newStream.Position = 0;
if(_enabled)
LogInput(message);
break;
当尝试访问它尝试记录的消息对象的 MethodInfo 属性时,LogInput 方法失败。这是调用该属性的代码块:
entry = new MyServerLogEntry();
entry.ServerURL = message.Url;
entry.Method = (message.MethodInfo == null) ? null : message.MethodInfo.Name;
当 message.MethodInfo 被调用时,它会冒泡到 SoapServerProtocol.get_MethodInfo(),并且在那里抛出空引用异常。我用谷歌搜索,并在 Stack Overflow 上进行了检查,但无法找出 MethodInfo 属性会引发异常的原因。
有谁知道如何确保在 Web 服务调用期间正确初始化此 MethodInfo 属性?
附加详细信息:如果我不尝试访问 MethodInfo 属性,则扩展程序可以正常工作并记录到我的数据库中。