在远程PC上部署WCF服务

时间:2011-05-10 13:39:29

标签: wcf web-services tfs

我有一个WCF Web服务,我在我的PC上的IIS中托管。我在Visual Studio项目中添加了服务引用,我可以在此VS项目的Web服务中成功调用它。

现在我正在尝试在未安装Visual Studio的远程PC上部署此Web服务。为此,我将此Web服务的.svc和web.config文件和bin文件夹复制到远程PC上的文件夹中。然后我在IIS上托管指向相应文件夹的服务。现在,当我使用.svc链接浏览Web服务时,我可以从我的PC访问Web服务。我在Visual Studio项目中添加了这个Web服务作为服务引用,一切看起来都很好,我能够在Object浏览器中看到单独的方法及其参数。当我尝试从此Web服务调用方法时出现问题。 我能够调用一个方法然后当我调用第二个方法时,我得到以下错误(绝对相同的Web服务及其所有方法在我的PC上的IIS中托管时都能正常工作。):

未将对象引用设置为对象的实例。

以下是我调用Web服务的方法的一部分(Web服务名称为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);

以下是我能够从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);
        ...
    }

以下是我从TFSWS调用并抛出错误消息的第二个方法的代码(当我调试时,我可以看到所有参数都已正确分配):

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;
        ...
    }

1 个答案:

答案 0 :(得分:0)

您可以远程调试以找出代码在目标计算机上遇到的问题,而无需在其上安装所有Visual Studio。您只需要部署调试而不是发布模式程序集,并在其上运行远程调试器服务。

Remote Debugging Setup