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

时间:2011-03-15 14:21:32

标签: c# web-services iis soap

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

但是当另一个程序员向我的服务发送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请求完全相同但我的工作却没有。

2 个答案:

答案 0 :(得分:7)

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

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

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

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

答案 1 :(得分:5)

如果您不确切知道错误发生的位置,则“对象引用”错误最难排除故障。请务必测试空值,因为此错误的最明显原因是未初始化对象或者当预期包含对象或值时变量具有空值。

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

最后,我强烈建议为错误处理程序包含某种日志记录机制。将错误保存到事件日志或数据库,甚至通过电子邮件发送 - 任何内容,以便您可以确切地确定错误的位置。 Do NOT display the error back to the user

有几种选择。 Asp.Net Health Monitoring在Web服务以及标准asp.net站点中运行良好。还有ELMAH,或者您可以编写自己的代码来执行此操作。

如果您遵循这些准则,则不会出现您不了解错误发生方式的情况。您将获得正确排查故障所需的信息,您的应用将更加稳固。