注:
使用.NET 2.0和VS2005作为IDE
大家好,
我正在记录对数据库的WebService调用,最后使用一个从另一个项目移植过来的非常简单的实现配置和运行了soapextension。我已经在配置文件中设置了它,所以它将针对所有方法运行。当我调用WebService并且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)的beforereserialize阶段调用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(),并在其中引发空引用异常。我在谷歌上搜索了一下,查看了这里的堆栈溢出情况,但还没有找到为什么MethodInfo属性会抛出异常。
是否有人知道如何确保在Web服务调用期间正确初始化此MethodInfo属性?
其他详细信息:
如果我不尝试访问MethodInfo属性,扩展将正常工作并记录到我的数据库。