我有一个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;
...
}
答案 0 :(得分:0)
您可以远程调试以找出代码在目标计算机上遇到的问题,而无需在其上安装所有Visual Studio。您只需要部署调试而不是发布模式程序集,并在其上运行远程调试器服务。