2011-03-15 62 views
11

Cuando envío localmente una solicitud SOAP a mi servicio en el IIS, todo funciona bien. Cuando envío una solicitud SOAP al mismo servicio que se ejecuta en IIS en otro host, todo funciona bien.Error de jabón: "El servidor no pudo procesar la solicitud" "Referencia de objeto no establecida en una instancia de un objeto"

Pero cuando otro programador envía una solicitud SOAP a mi servicio, que generalmente recibe la respuesta correcta, excepto un método en el servicio que devuelve:

<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> 

lo necesario para comprender por qué se está recibiendo este error.

Su solicitud SOAP es exactamente igual a SOAP Request pero la mía funciona y la suya no.

+3

Así que cuando se captura su solicitud jabón y envía esa petición exacta (con una herramienta similar al jabón soapUI) a su entorno de desarrollo funciona? Porque realmente parece que debería haber diferencias. –

+2

El programador está omitiendo/poniendo un tipo de valor incorrecto al menos en e de los parámetros en la solicitud. Pídale su código. –

+0

En mi caso este error se produjo debido a la petición no formateado xml.for ejemplo en la solicitud XML si es necesario etiqueta pero su solicitud xml este bloque se escribe como

dará este tipo de error. Entonces, antes de indagar en el código u otros scnerios, primero compruebe la solicitud xml incluso mejor si usa la aplicación SoapUI cree un nuevo objeto Request para su servicio web y rellene los datos en una nueva solicitud claramente. – dankyy1

Respuesta

6

Gracias chicos por toda su ayuda. Resolví el problema.

El campo 'SoapAction' en la solicitud de jabón tenían el mal URI

le recomiendo usar un sniffer HTTP. El sniffer http mostrará las propiedades de SOAP.

La propiedad "SOAPAction" debe tener algo como: http://tempuri.org/YourServiceMethodName

3

El error de "Referencia del objeto" es el más difícil de solucionar si no sabe exactamente dónde se está produciendo el error. Asegúrese de probar los valores nulos, ya que la causa más obvia de este error es que un objeto no se inicializa o una variable que tiene un valor nulo cuando se espera que contenga un objeto o un valor.

Además, asegúrese de estar siguiendo las mejores prácticas para el manejo de errores. Intente detectar los errores lo antes posible a menos que intencionalmente pretenda que un controlador de errores de nivel superior detecte el error. El hecho de que esté recibiendo este error significa que el manejo del error no es suficiente.

Finalmente, recomiendo incluir algún tipo de mecanismo de registro para los manejadores de errores. Guarde los errores en el registro de eventos, o en una base de datos, o incluso envíelos por correo electrónico, cualquier cosa, para que pueda decir exactamente dónde está el error. Do NOT display the error back to the user.

Existen varias opciones para esto. Asp.Net Health Monitoring funciona bien en servicios web, así como en sitios asp.net estándar. También hay ELMAH, o puede escribir su propio código para hacer esto.

Si sigue estas pautas, no se encontrará en una situación en la que no comprenda cómo se produce el error. Tendrás la información que necesitas para solucionar problemas correctamente y tus aplicaciones serán más sólidas.

Cuestiones relacionadas