2009-08-20 14 views
14

Tengo un servicio de prueba WCF y un cliente de prueba en la misma solución. El servicio está configurado para ejecutarse en el servidor local (por ejemplo, "http://localhost:8731/Design_Time_Addresses/MyService/Service"). Ejecuto la aplicación del cliente e invoca correctamente el servicio y recupera la respuesta correcta. He verificado a través de registros que definitivamente está ejecutando el servicio que es local para mi máquina. Sin embargo, no puedo depurar en el servicio cuando ejecuto el cliente. Se supone que WCF solo permite avanzar, pero no se golpean puntos de interrupción en el servicio, y tampoco puede funcionar la llamada de servicio. ¿Alguien ha visto esto alguna vez?WCF ya no puede acceder a un servicio alojado localmente, ¿por qué no?

He comprobado todas las cosas obvias como "¿se está generando el archivo PDB?" -- sí lo es. Si ejecuto el proyecto de servicio solo, luego lo golpeo con algún cliente de prueba, los puntos de interrupción reciben el golpe correcto. Así que la depuración en el servicio funciona. Incluso puedo "adherirme al proceso remoto" explícitamente y depurar el servicio de esa manera. Pero WCF no pasará automáticamente del cliente al servicio.

+0

cómo aloja su servicio WCF? Servicio de Windows? IIS? –

+0

No, se ejecuta localmente dentro de la misma solución a través de Visual Studio. IE, http: // localhost: 8731/Design_Time_Addresses/MyService/Service – tavistmorph

+0

Asegúrese de estar utilizando el punto final derecho cuando configure su proxy. Pasé una hora solo para darme cuenta de que estaba señalando un punto final que no tengo en desarrollo. – Trevor

Respuesta

3

¿Está utilizando la función de alojamiento de servicios WCF automática en Visual Studio? Puede verificar esto abriendo las propiedades del proyecto de su proyecto de servicio WCF y navegando a la pestaña Opciones de WCF. ¿Está el Start WCF Service Host al depurar otro proyecto en la misma solución marcada casilla de verificación? Si es así, entonces esto explica el problema.

Lo que sucede es que cuando ejecuta su cliente, se crea un proceso separado para alojar automáticamente su servicio WCF. Debido a que es un proceso separado, no podrá "entrar" cuando depure su cliente. Tendrá que ejecutar dos sesiones de depuración separadas, una para su servicio y otra para su cliente.

Una forma fácil de hacerlo es llamar a System.Diagnostics.Debugger.Break() en la lógica de inicio de su servicio. Cuando su servicio se inicia automáticamente por el host del servicio WCF, se le pedirá que lo depure, lo que le permite abrir una segunda instancia de Visual Studio para su sesión de depuración.

+0

Creo que esto solo se aplicaría si el servicio WCF está alojado por sí mismo, lo que significa que NO dentro de IIS, el servidor VS Dev o el host de servicio WCF. O más simplemente, lo que el OP está preguntando generalmente funciona "fuera de la caja" en una solución con un proyecto de WCF: puede simplemente entrar en él. – msulis

19

Tuve que pasar esto también. Curiosamente, parece suceder después de hacer cambios en la configuración de compilación (de x64 a x86). Así es como he podido solucionarlo:

  1. Haga clic con el botón derecho en la solución, seleccione Propiedades.
  2. En "Proyecto de inicio" cambie de "Proyecto de inicio único" a "Proyectos de inicio múltiples".
  3. Establezca Acción para "Comenzar" para el proyecto WCF.

Aunque estoy hospedando el proyecto en el servidor IIS local (no en VS Development Server), esto lo resuelve, lo cual es un poco desconcertante. Sospecho que establecer un proyecto en "Inicio" también hace que VS se conecte al proceso para la depuración.

http://msdn.microsoft.com/en-us/library/bb157685.aspx

+0

Solo me llevó 4 horas encontrar esta publicación. ¡Tú mandas! –

+0

Tengo problemas similares con el depurador, pero cambiar la configuración x86/x64 no funciona en mi máquina. El cliente y el servidor se ejecutan en 32 bits, pero aún así no puedo ingresar al código del servicio – Knasterbax

+1

+1 para obtener un buen sol. – pordi

0

tuve un problema similar. WCF alojado por WCF Service Host, solicitudes probadas por WCF Test Client. Mi problema fue causado por el espacio en el nombre de la configuración de compilación. Tan pronto como utilicé el nombre de la configuración sin espacios, funcionó correctamente.

Supongo que el problema real fue la carpeta de salida de compilación que termina en la carpeta nombrada por el nombre de la configuración.

0

@msulis - sí, gracias, esto lo remediaba por mí. También había cambiado recientemente, la CPU objetivo de cualquiera a x86.No pude responderle directamente a su mensaje por alguna razón, así que discúlpeme si esto aparece como una "respuesta".

0

Sí, tengo el mismo problema, WCF usa otros procesos.

Por fin, encontré una manera, comienzo una nueva instancia (depurar-> iniciar una nueva instancia) del servicio WCF primero, luego comienzo desde el lado del cliente, ¡los puntos de interrupción en el servicio WCF llegan!

1

Además, al usar depuración de VS y adjuntarlo al proceso w3wp.exe y tiene enlaces de puertos específicos que no sean http: 80: *, debe tener la depuración> web en VS configurada en el sitio y el puerto http en el que se ejecuta .

3

para Visual Studio múltiples configuraciones:

En las páginas de propiedades de su solución, asegúrese de que la "configuración" para su servicio web está configurado para "depuración", no "Release".

1

Otra razón para no ingresar al servicio de WCF puede ser el tamaño de sus datos que se pasan a los métodos de WCF.

Por ejemplo, estaba pasando una serie de dobules de tamaño 1000, y estaba obteniendo un error de solicitud incorrecta (400) al ver cómo se ejecuta el método. Hice el tamaño 500 y ahora depura el WCF.

+0

Esto me hizo pensar "el mensaje que estoy enviando también se cierra" (estoy enviando archivos binarios al servicio). ¡Redujo el tamaño del mensaje y solucionó el problema! –

Cuestiones relacionadas