2009-01-29 19 views
7

Tengo una referencia de servicio (no una referencia web) en VS2008 a un servicio web que no escribí. La referencia funciona, pero solo las versiones asíncronas de cada método están disponibles para mi uso.¿Por qué mi referencia de servicio solo genera métodos asíncronos?

En el cuadro de diálogo "Configurar referencia de servicio", la casilla "Generar operaciones asíncronas" está marcada y atenuada. Antes que nada, pensé que marcar esta casilla generaba métodos async además de, y no en lugar de, bloquear métodos. En segundo lugar, nunca lo he visto atenuado.

Tengo experiencia escribiendo ambos lados de WCF y servicios web de la era ASMX y nunca he visto esto antes. ¿Qué podría estar causando esto?

Gracias.

+0

¿Puede mostrarnos las secciones pertinentes de sus archivos de configuración de cliente y host? –

Respuesta

13

Estaría dispuesto a apostar diez votos positivos porque es porque estás haciendo esto en Silverlight. Lamentablemente, no tengo las herramientas instaladas, así que no puedo probar esta teoría, pero sí sé que las llamadas de servicio de Silverlight solo pueden ser asincrónicas. ¿Quizás está utilizando una plantilla de proyecto de Silverlight y está creando la referencia de servicio allí? Visual Studio puede ser lo suficientemente inteligente como para saber que no se deben generar métodos de bloqueo en una situación así.

Como referencia:

http://msdn.microsoft.com/en-us/library/cc197937(VS.95).aspx

+0

Realmente curioso para ver si estás en lo correcto. ¡Si nada más, es una gran suposición! –

+0

Tienes razón, es Silverlight. Me sorprende que olvidé mencionar eso. ¿Cuál es la razón para esto? Obviamente, puedo convertir una llamada asincrónica en una llamada síncrona esperando inmediatamente la respuesta (¿es esto un no? No). Es simplemente molesto ¿Por qué el código generado no puede hacer eso por mí? –

+0

Creo que la razón es que Silverlight se ejecuta en el hilo de la interfaz de usuario del navegador. Si bloquea, toda la página podría no responder. – Randolpho

2

Silverlight sólo genera llamadas de servicio asíncrono. Sin embargo, verifique CodeProject page.

Cuando comencé a trabajar con Silverlight, fue algo que me tiró al principio. Luego me di cuenta de que debería cambiar mi código para trabajar con el modelo asíncrono. No desea bloquear el hilo de UI mientras espera que vuelva la llamada de servicio.

3

El complemento de Silverlight se ejecuta en el subproceso de IU de navegadores. Si hiciera llamadas de red sincrónicas, bloquearía toda la secuencia de UI del navegador. En Chrome esto daría como resultado una pestaña que no respondía, en otros navegadores como IE, todo el navegador aparecería bloqueado.

Por lo tanto, al solo admitir redes asincrónicas, se ve obligado a escribir su aplicación en un generador asincrónico.

Cuestiones relacionadas