none
Cual es la mejor manera de instanciar un servicio WCF en visual studio RRS feed

  • Pregunta

  • Hola a todos

    Siempre que he usado WCF agrego mis referencias en visual studio y lo invoco
    MyServiceClient host = new MyServiceClient();

    Pero muchas veces en internet veo personas que hacen algo asi...
    using (var factory = new ChannelFactory<IMyService>("MyServiceEndPointName"))
       {
          var proxy = factory.CreateChannel();
          return proxy.Operation(i);
       }
    Cual es la diferencia entre el uno y el otro y cual es la mas recomendable?

    Gracias
    viernes, 18 de enero de 2013 13:31

Respuestas

  • En esa imagen te muestro los ensamblados y referencias. fíjate que en la capa de presentación, no he agregado una referencia a servicio, sino una referencia al proyecto de mis contratos de servicio, y lo que se muestra en el código, seria el agente de servicio usando ChannelFactory

    Espero que con este ejemplo entiendas la idea, si necesitas el fuente avisame

    Saludos


    Si la respuesta es correcta, marcala como correcta.
    Tambien puedes votar como util si te fue de ayuda
    MCPD Windows Developer 4/MVA GOLD/DCE 5 ESTRELLAS PLATINO
    Pedro Marquez - Venezuela

    • Marcado como respuesta AdyIr jueves, 24 de enero de 2013 15:40
    viernes, 18 de enero de 2013 19:47
  • Hola

    ChannelFactory se usa generalmente cuando compartes el ensamblado de los contratos del servicios entre el cliente y el servicio, en cuyo caso, no generarías el proxy a través de "Add Service Reference", este es un escenario cuando tienes control sobre el cliente y el servicio y usas .NET en ambos extremos,

    Espero haberme explicado con claridad, cualquier duda, no dudes en preguntar

    Saludos



    Si la respuesta es correcta, marcala como correcta.
    Tambien puedes votar como util si te fue de ayuda
    MCPD Windows Developer 4/MVA GOLD/DCE 5 ESTRELLAS PLATINO
    Pedro Marquez - Venezuela

    • Marcado como respuesta AdyIr jueves, 24 de enero de 2013 15:40
    viernes, 18 de enero de 2013 14:15
  • Agregar una referencia a un servicio es la forma mas fácil de acceder a este, sin embargo, en casos mas avanzados se usa ChannelFactory, lo uso particularmente cuando tengo control tanto del cliente como del servicio(hay casos en los que consumes servicios de terceros o construyes servicios y no conoces quienes lo van a consumir ni con que tecnología), para no tener que estar actualizando la referencia en el cliente cada vez que cambie mis contratos, en lugar de esto, defino dichos contratos en un ensamblado independiente de la implementación (así lo recomiendan las mejores practicas) y lo referencio en la capa de presentación, así no tengo necesidad de agregar una referencia al servicio y estar actualizando dicha referencia cada vez que mi servicio cambie.

     


    Si la respuesta es correcta, marcala como correcta.
    Tambien puedes votar como util si te fue de ayuda
    MCPD Windows Developer 4/MVA GOLD/DCE 5 ESTRELLAS PLATINO
    Pedro Marquez - Venezuela

    • Marcado como respuesta AdyIr jueves, 24 de enero de 2013 15:40
    viernes, 18 de enero de 2013 14:55

Todas las respuestas

  • Hola

    ChannelFactory se usa generalmente cuando compartes el ensamblado de los contratos del servicios entre el cliente y el servicio, en cuyo caso, no generarías el proxy a través de "Add Service Reference", este es un escenario cuando tienes control sobre el cliente y el servicio y usas .NET en ambos extremos,

    Espero haberme explicado con claridad, cualquier duda, no dudes en preguntar

    Saludos



    Si la respuesta es correcta, marcala como correcta.
    Tambien puedes votar como util si te fue de ayuda
    MCPD Windows Developer 4/MVA GOLD/DCE 5 ESTRELLAS PLATINO
    Pedro Marquez - Venezuela

    • Marcado como respuesta AdyIr jueves, 24 de enero de 2013 15:40
    viernes, 18 de enero de 2013 14:15
  • Hola

    ChannelFactory se usa generalmente cuando compartes el ensamblado de los contratos del servicios entre el cliente y el servicio, en cuyo caso, no generarías el proxy a través de "Add Service Reference", este es un escenario cuando tienes control sobre el cliente y el servicio y usas .NET en ambos extremos,

    Espero haberme explicado con claridad, cualquier duda, no dudes en preguntar

    Saludos



    Si la respuesta es correcta, marcala como correcta.
    Tambien puedes votar como util si te fue de ayuda
    MCPD Windows Developer 4/MVA GOLD/DCE 5 ESTRELLAS PLATINO
    Pedro Marquez - Venezuela

    Hola como estas, gracias por tu respuesta... No entendi muy bien del todo, osea siempre que uso .Net genero el proxy usando Services References por lo cual puedo usar el MyServiceClient host = new MyServiceClient();. cierto?

    Pero esta parte

    "ChannelFactory se usa generalmente cuando compartes el ensamblado de los contratos del servicios entre el cliente y el servicio, en cuyo caso"

    No la entendi muy bien

    viernes, 18 de enero de 2013 14:30
  • Agregar una referencia a un servicio es la forma mas fácil de acceder a este, sin embargo, en casos mas avanzados se usa ChannelFactory, lo uso particularmente cuando tengo control tanto del cliente como del servicio(hay casos en los que consumes servicios de terceros o construyes servicios y no conoces quienes lo van a consumir ni con que tecnología), para no tener que estar actualizando la referencia en el cliente cada vez que cambie mis contratos, en lugar de esto, defino dichos contratos en un ensamblado independiente de la implementación (así lo recomiendan las mejores practicas) y lo referencio en la capa de presentación, así no tengo necesidad de agregar una referencia al servicio y estar actualizando dicha referencia cada vez que mi servicio cambie.

     


    Si la respuesta es correcta, marcala como correcta.
    Tambien puedes votar como util si te fue de ayuda
    MCPD Windows Developer 4/MVA GOLD/DCE 5 ESTRELLAS PLATINO
    Pedro Marquez - Venezuela

    • Marcado como respuesta AdyIr jueves, 24 de enero de 2013 15:40
    viernes, 18 de enero de 2013 14:55
  • Agregar una referencia a un servicio es la forma mas fácil de acceder a este, sin embargo, en casos mas avanzados se usa ChannelFactory, lo uso particularmente cuando tengo control tanto del cliente como del servicio(hay casos en los que consumes servicios de terceros o construyes servicios y no conoces quienes lo van a consumir ni con que tecnología), para no tener que estar actualizando la referencia en el cliente cada vez que cambie mis contratos, en lugar de esto, defino dichos contratos en un ensamblado independiente de la implementación (así lo recomiendan las mejores practicas) y lo referencio en la capa de presentación, así no tengo necesidad de agregar una referencia al servicio y estar actualizando dicha referencia cada vez que mi servicio cambie.

     


    Si la respuesta es correcta, marcala como correcta.
    Tambien puedes votar como util si te fue de ayuda
    MCPD Windows Developer 4/MVA GOLD/DCE 5 ESTRELLAS PLATINO
    Pedro Marquez - Venezuela

    Hola de nuevo Marquez, disculpa pero me podrias mostrar un ejemplo de eso

    "defino dichos contratos en un ensamblado independiente de la implementación (así lo recomiendan las mejores practicas) y lo referencio en la capa de presentación".

    Tampoco entiendo porque dicen que es mas flexible usar el ChannelFactory, actualmente tengo  un pagina web la cual consume unos servicio de WCF "creados ambos por mi", segun en este cso lo mas recomendable seria usar el ChannelFactory, pero no tendria que modificar el codigo cada cez que actualice o cambie algo en mis servicios, mientras que si agrego la referencia y le doy Update Reference y listo no es mas facil?

    Usar el ChannelFactory trae alguna ventaja a nivel de performance

    Gracias de nuevo


    • Editado AdyIr viernes, 18 de enero de 2013 16:22
    viernes, 18 de enero de 2013 16:12
  • En esa imagen te muestro los ensamblados y referencias. fíjate que en la capa de presentación, no he agregado una referencia a servicio, sino una referencia al proyecto de mis contratos de servicio, y lo que se muestra en el código, seria el agente de servicio usando ChannelFactory

    Espero que con este ejemplo entiendas la idea, si necesitas el fuente avisame

    Saludos


    Si la respuesta es correcta, marcala como correcta.
    Tambien puedes votar como util si te fue de ayuda
    MCPD Windows Developer 4/MVA GOLD/DCE 5 ESTRELLAS PLATINO
    Pedro Marquez - Venezuela

    • Marcado como respuesta AdyIr jueves, 24 de enero de 2013 15:40
    viernes, 18 de enero de 2013 19:47
  • En esa imagen te muestro los ensamblados y referencias. fíjate que en la capa de presentación, no he agregado una referencia a servicio, sino una referencia al proyecto de mis contratos de servicio, y lo que se muestra en el código, seria el agente de servicio usando ChannelFactory

    Espero que con este ejemplo entiendas la idea, si necesitas el fuente avisame

    Saludos


    Si la respuesta es correcta, marcala como correcta.
    Tambien puedes votar como util si te fue de ayuda
    MCPD Windows Developer 4/MVA GOLD/DCE 5 ESTRELLAS PLATINO
    Pedro Marquez - Venezuela

    Hola y muchas gracias, si ya entendi la idea. Bueno de necesitarla como tal no, pero si gustas enviarme las fuentes las veria con mucho gusto para realizar unas practicas...

    Gracias por tu ayuda

    lunes, 21 de enero de 2013 16:33