Pregunta

Creé un servicio WCF (.NET 3.5) que toma datos de un DB y devuelve una lista de objetos. Funciona bien. Lo probé usando la aplicación WCFTestClient y obtuve los resultados deseados.

Ahora, intenté crear una aplicación web ASP.NET y consumir el servicio. Después de habilitar <serviceDebug includeExceptionDetailInFaults="true"/> En el archivo de configuración, el mensaje de error es "referencia de objeto no establecido en una instancia de un objeto".

¿Cómo modifico el servicio para que funcione con ASP.NET?

¡Gracias!

Actualización 1: creé una referencia al servicio. Cuando ejecuté mi aplicación de prueba muy básica, en función del código de muestra que se muestra en la página web predeterminada del servicio, obtuve la referencia de objeto "no configurada en una instancia de un objeto".

El servicio está devolviendo los resultados correctos cuando uso la utilidad del cliente de prueba WCF proporcionada con Visual Studio. Cuando intento usar el siguiente código, todo en el evento Page_Load, obtengo el mensaje de referencia del objeto.

PhoneNumberServiceClient client = new PhoneNumberServiceClient();

// Use the 'client' variable to call operations on the service
List<PhoneNumber> phones = client.GetPhoneNumbers();  

// Always close the client.
client.Close();

Intentaré obtener información de depuración adicional.

¿Fue útil?

Solución

¿Ha intentado abrir el servicio después de inicializarlo usando:

client.Open();

Si el problema aún persiste, tal vez se encuentra en el método WCF en sí. Intente agregar puntos de interrupción en su método y depurarlo para rastrear la causa del error. También podrías usar perfiladores.

Otros consejos

También debe configurar el servicio para permitir detalles de excepción en los resultados. Sigue la información aquí para que eso suceda.

Supongo que su aplicación ASP.NET espera obtener cierta información del servicio que no lo ha configurado para proporcionar, de ahí el error de objeto NULL.

Hubiera escrito esto como comentario, pero no pude entender cómo hacerlo, así que supongo que intentaré una respuesta.

Mencionó que usó el cliente de prueba incorporado, pero cuando creó su aplicación de cliente (el sitio web con el que desea llamar a su nuevo servicio) ¿Ha configurado su punto final (Web.Config) para que coincida con el final de su servicio WCF ? Por ejemplo, una aplicación de cliente que llama a un servicio WCF con WSHTPBINDING ENDPOIN:

<configuration>
<system.serviceModel>
    <client>
        <endpoint address="http://localhost:8080/ContractorService" binding="wsHttpBinding" contract="ContractorService.IContractorService"
            name="ContractorService_WsHttp">
        </endpoint>
    </client>
</system.serviceModel>

Además, su servicio está devolviendo una lista, el Referencia de servicio predeterminada que agregó a su cliente muy probablemente se detiene en la matriz. Haga clic derecho en la referencia de servicio que su cliente ahora tiene y seleccione Configurar la referencia del servicio, en el cuadro desplegable para el tipo de recolección, en lugar de System.Array, seleccione System.Collections.Generic.List.

Si necesita detalles sobre la configuración, consulte aquí http://msdn.microsoft.com/en-us/library/dd936243.aspx

Coloque un punto de quiebre en el método Page_Load de su cliente, debería poder pasar por el código de su cliente y se unirá automáticamente en su servicio WCF una vez que llame a su método, puede ver exactamente dónde falla. Espero que esto ayude

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top