none
Hostear Servicio WCF como Servicio de Windows RRS feed

  • Pregunta

  • Hola, tengo el siguinte caso:

    he creado un servicio de WCF al probarlo con el WCF test client, funciona sin problema, para las pruebas he alojado mi servicio sobre una aplicacion de consola y el cliente se conecta en forma correcta, pero al alojar el servicio sobre el servicio de windows me marca el error

    No se pudo conectar a net.tcp://localhost:8000/wwServicio/. La duración del intento de conexión fue de 00:00:01.2343671. Código de error TCP 10061: No se ha podido establecer conexión ya que el equipo de destino ha denegado activamente dicha conexión 127.0.0.1:8000.  ---> System.Net.Sockets.SocketException: No se ha podido establecer conexión ya que el equipo de destino ha denegado activamente dicha conexión 127.0.0.1:8000

    este es el codigo q tengo en el servicio

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Diagnostics;
    using System.Linq;
    using System.ServiceProcess;
    using System.Text;
    
    using System.ServiceModel;
    using wwServicio;
    
    namespace wwHostServicio
    {
      public partial class WWHostServicio : ServiceBase
      {
        public WWHostServicio()
        {
          InitializeComponent();
        }
    
        internal static ServiceHost myHost = null;
        BackgroundWorker worker;
    
        protected override void OnStart(string[] args)
        {
          worker = new BackgroundWorker();
          worker.DoWork += new DoWorkEventHandler(worker_DoWork);
        }
    
        protected override void OnStop()
        {
          if (myHost != null)
          {
            myHost.Close();
            myHost = null;
          }
        }
    
        void worker_DoWork(object sender, DoWorkEventArgs e)
        {
          if (myHost != null)
          {
            myHost.Close();
          }
    
          myHost = new ServiceHost(typeof(wwServicio.WWServicio));
          myHost.Open();
        }
    
      }
    }
    
    //---
    
    
    para el servicio estoy usando el binding: netTcpBinding
    gracias por la ayuda
    Ricardo Cabra Ingeniero de Sistemas
    miércoles, 27 de octubre de 2010 16:37

Respuestas

  • Hola Ricardo

    Algunas cosas que puedes verificar:

    1) Si el cliente es remoto, verifica el firewall del equipo donde esta hospedado el servicio. También verifica las credenciales que utiliza el cliente para autenticarse con el servicio.

    2) Si el cliente es local o remoto verifica que el servicio Windows se esté ejecutando en el contexto de un usuario con permisos para realizar las tareas que requiera propiamente el servicio.

    Saludos!!!


    MSM-DotNet

    • Marcado como respuesta Ricardo Cabra miércoles, 27 de octubre de 2010 22:35
    miércoles, 27 de octubre de 2010 17:17
    Moderador
  • hola

    intenta no usar elBackgroundWorker, eliminalo del servicio, he inicia directo en el OnStart la host de WCF

    como explica este articulo

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta Ricardo Cabra miércoles, 27 de octubre de 2010 22:34
    miércoles, 27 de octubre de 2010 18:17

Todas las respuestas

  • Hola Ricardo

    Algunas cosas que puedes verificar:

    1) Si el cliente es remoto, verifica el firewall del equipo donde esta hospedado el servicio. También verifica las credenciales que utiliza el cliente para autenticarse con el servicio.

    2) Si el cliente es local o remoto verifica que el servicio Windows se esté ejecutando en el contexto de un usuario con permisos para realizar las tareas que requiera propiamente el servicio.

    Saludos!!!


    MSM-DotNet

    • Marcado como respuesta Ricardo Cabra miércoles, 27 de octubre de 2010 22:35
    miércoles, 27 de octubre de 2010 17:17
    Moderador
  • Hola, he verificado firewall y demas cosas.. 

    el servicio tiene inicio de sesion : cuenta de usuario local

    pero debi activarle la casilla "Permitir a los usuarios que interactuen con el escritorio"

    y la verdad no se por que o que afecte esto pero ya funciono...

    ????


    Ricardo Cabra Ingeniero de Sistemas
    miércoles, 27 de octubre de 2010 18:16
  • hola

    intenta no usar elBackgroundWorker, eliminalo del servicio, he inicia directo en el OnStart la host de WCF

    como explica este articulo

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta Ricardo Cabra miércoles, 27 de octubre de 2010 22:34
    miércoles, 27 de octubre de 2010 18:17
  • hice el ejemplo del link q envio Leandro y me marco este error al momento de iniciar el servicio

    ---------------------------
    Servicios
    ---------------------------
    El servicio WCF_WS_Test se inició en Equipo local y después se detuvo. Algunos servicios se detienen automáticamente si no tienen nada que hacer, por ejemplo, el servicio Alertas y registros de rendimiento.
    ---------------------------
    Aceptar  
    ---------------------------


    Ricardo Cabra Ingeniero de Sistemas
    miércoles, 27 de octubre de 2010 20:27
  • volvi a hacer todo desde cero... y funciono

    pero me queda la duda, del por que la falla del primer servicio

     


    Ricardo Cabra Ingeniero de Sistemas

    • Editado Ricardo Cabra miércoles, 27 de octubre de 2010 22:51 adicion
    miércoles, 27 de octubre de 2010 22:43
  • Por lo que veo, el problema fue de derechos efectivamente.

    BackgroundWorker esta diseñado para trabajar en un thread de una interface de usuario (UI) por eso al activar la opción de "Permitir a los usuarios que interactuen con el escritorio" le permitiste al BackgroundWorker trabajar y en consecuencia desaparecio el error.

    En servicios Wiindows evita utilizar componentes que trabajen sobre un thread de interface de usuario como es el caso de BackgroundWorker. Un servicio no deberia interactuar con los usuarios.

    Tambien en servicios Windows evita activar la opción de "Permitir a los usuarios que interactuen con el escritorio"  ya que no siempre habra un usuario que hay iniciado sesión y que pueda interactuar con el servicio.

    El problema de "El servicio WCF_WS_Test se inició en Equipo local y después se detuvo" es de derechos. La cuenta asociada al servicio no tiene los derechos que requiere para abrir puertos del servicio WCF.

    Al crear un servicio Windows que hospede un Servicio WCF puedes utilizar la cuenta "Local System account" o una cuenta con derechos similares para permitirle abrir los puertos de los endpoints.

    Saludos!!! 

     

     


    MSM-DotNet
    jueves, 28 de octubre de 2010 2:09
    Moderador