У меня есть веб-сервис WCF, который я разместил в IIS на моем ПК.Это я добавил в качестве ссылки на службу в проекте Visual Studio и могу успешно вызвать его в веб-службе в этом проекте VS.
Теперь я пытаюсь развернуть эти веб-службы на удаленном ПК, которыйне установлен Visual Studio.Для этого я скопировал файлы .svc и web.config и папку bin этих веб-служб в папку на удаленном ПК.Затем я разместил службы в IIS, указывая на соответствующую папку.Теперь, когда я просматриваю веб-службу по ссылке .svc, я могу получить доступ к веб-службе с моего компьютера.Я добавил этот веб-сервис в качестве ссылки на сервис в моем проекте Visual Studio, и все выглядит хорошо, я могу видеть отдельные методы и их параметры в браузере объектов.Проблема возникает, когда я пытаюсь вызвать методы из этих веб-сервисов.Я могу вызвать один метод, а затем, когда я вызываю второй, я получаю следующую ошибку (Абсолютно тот же веб-сервис и все его методы отлично работают, если размещены в IIS на моем ПК.):
Ссылка на объект не установлена для экземпляра объекта.
Вот часть метода, в котором я вызываю веб-службу (имя веб-службы - 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;
...
}