2011-11-25 14 views
6

Estoy (de nuevo y todavía) tratando de consumir algunos servicios de WCF en Monotouch. Primer enfoque: agregar una referencia web en Monodevelop fallido. No puede crear el archivo de referencia. Luego probé SVCUTIL.EXE y recibí el error de que el genérico ChannelFactory no está disponible en Monotouch, supongo que porque no hay reflexión disponible.Monotouch y WCF: diferencia de SVCUTIL.EXE y SLSVCUTIL.EXE y cómo evitar ChannelFactory genérico no compatible?

Probé SLSVCUTIL.EXE desde el SDK de Silverlight 3. Esto genera espacios de nombres para los diversos servicios que difieren de los creados a través de SVCUTIL.EXE. Como ya tengo un montón de código de contenedor, tengo que cambiar mucho. surgen

Estas preguntas:

  • ¿Puedo anular los métodos createChannel y volver canales especializados para cada servicio en lugar de depender de la versión no-existente genérico, como propone la excepción de que se tira? Esto significa arreglar el código generado por SVCUTIL.EXE.
  • ¿Cómo creo un canal en un método reemplazado? Solo tengo interfaces de mis servicios. Busqué en Google y no pude encontrar ningún ejemplo. ¿Cómo se ve el código que debe escribirse en ese método?
  • Totalmente confuso para mí: ¿cuál es la diferencia entre las dos utilidades de servicio?
  • Si obtengo el problema del espacio de nombres resuelto, ¿los resguardos creados a través de la utilidad Silverlight harán que mi proyecto funcione o también sufrirá el problema del canal genérico?
  • ¿por qué la herramienta Silverlight funciona sin emitir código dinámicamente? ¿Cuál es la diferencia en el código de salida y qué ventaja tiene la versión dinámica?
  • qué versión de Silverlight es compatible con MT. ¿Puedo usar la herramienta de v4 o tiene que ser la versión 3?
  • ¿WCF en MT admite transmisión, como la descarga de archivos de gran tamaño?

Respuesta

5

WCF es una enorme bestiay es muy difícil dar respuestas generales sobre el mismo, también depende mucho de los detalles. La regla general es que MonoTouch admite el mismo subconjunto de WCF que se envió con Silverlight (incluso si se realizaron algunas adiciones a lo largo del tiempo).

Supongo que porque no hay reflejo disponible.

La reflexión está disponible y funciona con MonoTouch. Reflection.Emit hace no ya que Apple no permite el código JIT en dispositivos iOS. Esto puede limitar algunas API que requieren la generación de código en tiempo de ejecución (pero no es un problema si la generación de código se puede hacer en tiempo de compilación).

... Esto significa arreglar el código generado por SVCUTIL.EXE. ...

Pelear/editar código generado es generalmente una mala idea (por ejemplo, mantenimiento futuro). Le sugiero que intente utilizar slsvcutil.exe antes de invertir demasiado tiempo en personalizar el código generado.

...¿Cómo se ve el código que debe escribirse en ese método?

El código fuente completo para Mono de System.ServiceModel y System.ServiceModel.Web están disponibles si desea proporcionar su propio canal (o personalizar el código generado).

Totalmente confuso para mí: ¿cuál es la diferencia entre las dos utilidades de servicio?

El SL prefijo, en slsvcutil.exe, es para Silverlight. Microsoft creó esta herramienta para generar código que solo usará el subconjunto WCF disponible en Silverlight. Dado que este es el mismo subconjunto compatible con MonoTouch, esta es la mejor herramienta para usar.

Si obtengo el problema del espacio de nombres resuelto, ¿los resguardos creados a través de la utilidad Silverlight harán que mi proyecto funcione o también sufrirá el problema del canal genérico?

Es debe trabajo. Así es como las personas están usando (el subconjunto disponible de) WCF con MonoTouch hoy. Si hay problemas con esto (subconjunto/herramienta) puede llenar un informe bug al respecto (con un caso de prueba) y lo veremos.

+0

¡Gracias Sebastien por esta respuesta detallada! Agregué dos puntos más arriba. Si encuentras tiempo, ¿quizás puedas comentar esos también? – Krumelur

+0

Aceptado como la mayoría de los puntos respondidos, la discusión continúa en la lista de correo de Monotouch. – Krumelur

Cuestiones relacionadas