Ошибка мыла: "Сервер не смог обработать запрос" "Ссылка на объект не установлена ​​в экземпляр объекта"

Когда я отправляю SOAP-запрос на мою службу в IIS локально, все работает нормально. Когда я отправляю 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, но мои работы не работают.

Ответ 1

Спасибо, ребята, за вашу помощь. Я решил проблему.

Поле "SoapAction" в запросе мыла имело неправильный URI

Я рекомендую использовать сниффер HTTP. Http-сниффер покажет свойства SOAP.

Свойство SOAPAction должно иметь что-то вроде: http://tempuri.org/YourServiceMethodName

Ответ 2

Ошибка "Ссылка на объект" является наиболее сложной для устранения неполадок, если вы точно не знаете, где происходит ошибка. Не забудьте проверить нулевые значения, поскольку наиболее очевидной причиной этой ошибки является объект, который не инициализируется, или переменная, имеющая нулевое значение, когда ожидается, что она будет содержать объект или значение.

Кроме того, убедитесь, что вы используете лучшие методы обработки ошибок. Попытайтесь поймать ошибки на самом раннем возможном уровне, если вы не намерены намереваться, чтобы обработчик ошибок более высокого уровня поймал ошибку. Тот факт, что вы получаете эту ошибку, означает, что обработка ошибок недостаточна.

Наконец, я настоятельно рекомендую включить какой-то механизм ведения журнала для ваших обработчиков ошибок. Сохраните ошибки в журнале событий или в базе данных или даже отправьте их по электронной почте - что угодно, чтобы вы могли точно указать, где именно находится ошибка. НЕ отображать ошибку для пользователя.

Для этого есть несколько вариантов. Asp.Net Health Monitoring отлично работает в веб-сервисах, а также в стандартных сайтах asp.net. Там также ELMAH, или вы можете написать свой собственный код, чтобы сделать это.

Если вы будете следовать этим рекомендациям, вы не окажетесь в ситуации, когда вы не понимаете, как происходит ошибка. У вас будет информация, необходимая для правильного устранения неполадок, и ваши приложения будут более прочными.