2011-03-15 48 views
11

當我在本地向IIS服務發送SOAP請求時,一切正常。 當我向其他主機上的IIS上運行的相同服務發送SOAP請求時,一切正常。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請求完全相同,但是我的作品和他的不一樣。

+3

所以,當你抓住他的SOAP請求和發送(與像的soapUI肥皂工具),準確的要求,你的開發環境,它的工作原理?因爲它確實聽起來應該有差異。 – 2011-03-15 14:27:11

+2

程序員至少在請求中的參數中省略/放置錯誤類型的值。 詢問他的代碼。 – 2011-03-15 14:27:18

+0

在我的情況下,如果需要的標籤 但您的XML請求該塊被寫成

會給這種錯誤的發生這個錯誤,因爲在請求XML xml.for例如未格式化請求。 所以挖掘到代碼或其他scnerios之前,首先檢查請求XML 即使你使用了SoapUI應用程序創建一個新的Request對象爲你的web服務,並明確填寫新的請求DATAS越好.. – dankyy1 2015-01-06 06:35:12

回答

6

謝謝各位的幫助。我解決了這個問題。

在SOAP請求的「SOAPACTION」字段有錯誤的URI

我建議使用HTTP嗅探器。 http嗅探器將顯示SOAP屬性。

的「SOAPAction的」屬性應該是這樣的:http://tempuri.org/YourServiceMethodName

3

如果您不確切知道錯誤發生的位置,則「對象引用」錯誤是最難排除故障的。一定要測試空值,因爲這個錯誤最明顯的原因是一個對象沒有被初始化,或者當一個變量被期望包含一個對象或一個值時,它是一個空值的變量。

此外,請確保您遵循錯誤處理的最佳做法。嘗試儘早捕獲錯誤,除非您故意打算讓更高級別的錯誤處理程序捕獲錯誤。事實上,你得到這個錯誤意味着錯誤處理是不夠的。

最後,我強烈建議爲錯誤處理程序提供某種記錄機制。將錯誤保存到事件日誌或數據庫中,或者甚至通過電子郵件發送給他們 - 任何事情,以便您可以準確地確定錯誤發生的位置。 Do NOT display the error back to the user

這有幾個選項。 Asp.Net Health Monitoring在Web服務以及標準的asp.net站點中都能正常工作。還有ELMAH,或者您可以編寫自己的代碼來執行此操作。

如果您遵循這些準則,您將不會處於不瞭解錯誤發生的情況。您將獲得正確解決問題所需的信息,並且您的應用程序將更加穩固。

相關問題