Soap 错误:“服务器无法处理请求”“对象引用未设置为对象的实例”

Posted

技术标签:

【中文标题】Soap 错误:“服务器无法处理请求”“对象引用未设置为对象的实例”【英文标题】:Soap Error: "Server was unable to process request" "Object reference not set to an instance of an object" 【发布时间】:2011-03-15 14:21:32 【问题描述】:

当我在本地向 IIS 中的服务发送 SOAP 请求时,一切正常。 当我向在另一台主机上的 IIS 上运行的同一服务发送 SOAP 请求时,一切正常。

但是当另一个程序员向我的服务发送一个 SOAP 请求时,他通常会得到正确的响应,除了服务中返回的一个方法:

<soap:Body>
<soap:Fault>
  <faultcode>soap:Server</faultcode>
  <faultstring>Server was unable to process request. ---&gt; Object reference not set to an instance of an object.</faultstring>
  <detail />
</soap:Fault>

我需要了解他为什么会收到此错误。

他的 SOAP 请求与 SOAP 请求完全相同,但我的有效,而他的无效。

【问题讨论】:

所以当你捕获他的soap请求并将那个确切的请求(使用soapUI之类的soap工具)发送到你的开发环境时,它可以工作吗?因为听起来确实应该存在差异。 程序员在请求中的至少一个参数中省略/输入了错误类型的值。询问他的代码。 在我的情况下,发生此错误是因为没有格式化请求 xml。例如在请求 xml 中,如果需要标记
但您的请求 xml 这个块写为 会报这种错误。因此,在深入研究代码或其他 scnerios 之前,如果您使用 SoapUI 应用程序,请首先检查请求 xml,为您的 Web 服务创建一个新的 Request 对象并清楚地在新请求中填写数据..
没有办法重现这个问题,这个问题对于堆栈溢出完全没用。实际上,这是题外话。 【参考方案1】:

如果您不知道错误发生的确切位置,则“对象引用”错误是最难解决的。一定要测试空值,因为这个错误最明显的原因是一个对象没有被初始化或者一个变量有一个空值,而它应该包含一个对象或一个值。

此外,请确保您遵循错误处理的最佳做法。尝试在尽可能早的级别捕获错误,除非您有意让更高级别的错误处理程序捕获错误。您收到此错误的事实意味着错误处理是不够的。

最后,我强烈建议为您的错误处理程序添加某种日志记录机制。将错误保存到事件日志或数据库,甚至通过电子邮件发送它们 - 任何东西,这样您就可以准确地知道错误在哪里。 Do NOT display the error back to the user。

对此有多种选择。 Asp.Net Health Monitoring 在 Web 服务和标准 asp.net 站点中运行良好。还有ELMAH,也可以自己写代码来实现。

如果您遵循这些准则,您将不会处于不了解错误是如何发生的情况。您将获得正确排除故障所需的信息,并且您的应用程序将更加可靠。

【讨论】:

【参考方案2】:

感谢大家的帮助。我解决了这个问题。

soap 请求中的“SoapAction”字段的 URI 有误

我建议使用 HTTP 嗅探器。 http 嗅探器将显示 SOAP 属性。

“SOAPAction”属性应该类似于:http://tempuri.org/YourServiceMethodName

【讨论】:

这是您的链接:404 - 找不到文件或目录。 @Rodniko

以上是关于Soap 错误:“服务器无法处理请求”“对象引用未设置为对象的实例”的主要内容,如果未能解决你的问题,请参考以下文章

在 Unity 上制作 SOAP 客户端但收到 SOAP 异常

由于内部错误,服务器无法处理请求

公共静态对象引用未设置错误

对象引用未设置为对象的实例...错误?

错误:对象引用未初始化

Ldap连接抛出对象引用未设置为对象错误的实例