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


当我在本地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 Request完全相同,但我的工作却没有。


6844
2018-03-15 14:21


起源

因此,当您捕获他的soap请求并将确切的请求(使用soapUI等肥皂工具)发送到您的开发环境时,它有效吗?因为它确实听起来应该有差异。 - F.B. ten Kate
程序员至少在请求中的参数中省略/输入错误类型的值。问他的代码。 - Sarwar Erfan
在我的情况下,由于没有格式化请求xml.for请求xml中的示例,如果需要标记<tel:Header> </ tel:Header>但是您的请求xml此块写为<Header> </ Header>将给出此错误这种错误。因此,在深入研究代码或其他scnerios之前,首先检查请求xml甚至更好,如果你使用SoapUI应用程序为你的webservice创建一个新的Request对象并清楚地填写新请求中的数据。 - dankyy1
没有任何方法可以重现这个问题,这个问题对于堆栈溢出是完全没用的。实际上,这是偏离主题的。 - Ulrich Eckhardt


答案:


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

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

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

“SOAPAction”属性应该具有以下内容: http://tempuri.org/YourServiceMethodName


6
2018-03-16 11:38





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

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

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

有几种选择。 Asp.Net健康监测 在Web服务以及标准的asp.net站点中工作正常。还有 ELMAH,或者您可以编写自己的代码来执行此操作。

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


4
2018-03-15 14:33