Implementar un servicio WCF en una PC remota

Tengo un servicio web WCF, que he alojado en IIS en mi PC. Esto lo agregué como referencia de servicio en un proyecto de Visual Studio y puedo invocarlo con éxito en un servicio web en este proyecto VS.

Ahora estoy intentando implementar estos servicios web en una PC remota, que no tiene Visual Studio instalado. Para este propósito, copié los archivos .svc y web.config y la carpeta bin de estos servicios web en una carpeta en la PC remota. Luego alojé los servicios en IIS apuntando a la carpeta respectiva. Ahora, cuando navego por el servicio web utilizando el enlace .svc, puedo acceder al servicio web desde mi PC. Agregué este servicio web como referencia de servicio en mi proyecto de Visual Studio y todo se ve bien, puedo ver los métodos separados y sus parámetros en el navegador de objetos. El problema aparece cuando intento invocar métodos de estos servicios web. Puedo invocar un método y luego, cuando invoco el segundo, obtengo el siguiente error (El mismo servicio web y todos sus métodos funcionan perfectamente si están alojados en IIS en mi PC):

Referencia a objeto no establecida como instancia de un objeto.

Aquí hay una parte del método donde invoco el servicio web (el nombre del servicio web es TFSWS):

public void ImportRequirements(string username, string password)
    {
        TFSWS.TFSWSClient obj = new TFSWS.TFSWSClient();
        string projects = obj.GetTFSProjects(username, password, TFS_URI);
        string list = obj.GetAllWorkItems(ProjectName2, username, password, TFS_URI, WItypes);

Aquí está el código del primer método que puedo invocar con éxito desde TFSWS:

public string GetTFSProjects(string userName, string password, string Uri)
    {
        StringWriter MyStringWriter = new StringWriter();
        NetworkCredential cred = new NetworkCredential(userName, password);
        TfsTeamProjectCollection _tfs = new TfsTeamProjectCollection(new Uri(Uri), cred);
        _tfs.Authenticate();
        ICommonStructureService tfsProjectService = (ICommonStructureService)_tfs.GetService(typeof(ICommonStructureService));
        ProjectInfo[] projects = tfsProjectService.ListAllProjects();
        string[] proj = new string[projects.Length];
        for (int i = 0; i < projects.Length; i++)
        {
            proj[i] = projects[i].ToString();
        }
        DataTable ProjectsDT = GetDataTableFromArray(proj);
        ...
    }

Aquí está el código del segundo método que invoco desde TFSWS y que arroja el mensaje de error (cuando depuro puedo ver que todos los parámetros están asignados correctamente):

public string GetAllWorkItems(string projectName, string username, string password, string URI, string[] WItypes)
    {
        StringWriter MyStringWriter = new StringWriter();
        NetworkCredential cred = new NetworkCredential(username, password);
        TfsTeamProjectCollection _tfs = new TfsTeamProjectCollection(new Uri(URI), cred);
        _tfs.Authenticate();
        WorkItemStore _witStore =(WorkItemStore)_tfs.GetService(typeof(WorkItemStore));
        DataTable myData = new DataTable();
        string project = projectName;
        string[] m_columns;
        Hashtable context = new Hashtable();
        Project proj = _witStore.Projects[project];
        }
        string myQuery = "SELECT [System.Id], [System.Title], [System.WorkItemType], [System.State] FROM WorkItems WHERE ...";
        WorkItemCollection result = _witStore.Query(myQuery, context);
        DisplayFieldList fieldList = result.Query.DisplayFieldList;
        ...
    }

preguntado el 10 de mayo de 11 a las 13:05

Es posible que desee considerar recortar un poco el código o refactorizar algunos métodos. Es bastante difícil depurar tantas cosas con solo leerlas. Al refactorizar, también puede reducir un poco más el área del problema ...

La excepción que está obteniendo significa que el código está intentando acceder a una instancia de objeto que no se ha inicializado o que se estableció en nulo después de la primera llamada. Puede configurar el servicio WCF en la PC remota con esta configuración para obtener el seguimiento de la pila que puede identificar dónde está ocurriendo el objeto no inicializado. -

Ya lo he hecho. Desafortunadamente, el seguimiento de la pila no me brinda información útil. -

1 Respuestas

Puede depurar de forma remota para averiguar el problema que está experimentando el código en la máquina de destino, sin instalar todo Visual Studio en él. Solo necesita implementar la depuración en lugar de los ensamblados en modo de lanzamiento y tener el servicio de depuración remoto ejecutándose en él.

Configuración de depuración remota

contestado el 10 de mayo de 11 a las 19:05

Gracias Mike, eso resolvió mi problema. Utilicé la depuración remota y pude identificar dónde está el problema. Como no tengo Team Foundation Server instalado en la PC remota, donde estoy alojando mis servicios web, faltaban algunos ensamblados TFS, que tuve que copiar en la carpeta bin de mi servicio web. Ahora todo funciona bien. Tuve algunas dificultades para configurar el depurador remoto y estos enlaces fueron especialmente útiles para mí msdn.microsoft.com/en-us/library/9y5b4b4f.aspx y codeproject.com/KB/aspnet/IISRemoteDebugging.aspx. - Ina

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.