В общем, есть web-сервис, часть методов которого работают как обычные отчёты (выгружают данные процедур отчёта напрямую из базы, в обход сервиса CRM), и есть методы, использующие Organization.svc.
Так вот все методы сервиса работают без проблем, если
1) Запускаются с локального IIS'а (нажатием на "Invoke" в браузере)
2) Работают из тестового приложения, которое деплоит сервис, подключенный из "соседнего" проекта в том же солюшене. (Вэб-ссылка добавляется "из проекта").
Но стоит подключить тот же самый веб-сервис из тестового приложения по ссылке на тот же локальный IIS (
http://localhost:777/ReportsService.asmx), как он падает при попытке достучаться к Organization.svc со следующим ругательством:
"System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.InvalidOperationException: Metadata contains a reference that cannot be resolved: 'http://servername/Organization.svc?wsdl'. ---> System.Net.WebException: The remote name could not be resolved: 'servername'
at System.Net.HttpWebRequest.GetResponse()
at System.ServiceModel.Description.MetadataExchangeClient.MetadataLocationRetriever.DownloadMetadata(TimeoutHelper timeoutHelper)
at System.ServiceModel.Description.MetadataExchangeClient.MetadataRetriever.Retrieve(TimeoutHelper timeoutHelper)"
При этом другие методы (работающие с базой напрямую, без подключения к CRM'у) продолжают работать как положено.
Ради теста вынесла кусок кода, в котором происходит поломка, в отдельный веб-метод, захардкодив для верности строку подключения:
Код:
[WebMethod(Description = "Тестируем глючное место")]
public void TestImpers()
{
IntPtr token = ((WindowsIdentity)User.Identity).Token;
WindowsImpersonationContext context = WindowsIdentity.Impersonate(token);
string imp = WindowsIdentity.GetCurrent().Name;
Uri organizationUri = new Uri("http://____________Organization.svc");
var cred = new ClientCredentials();
//---вот на этой строчке ломается
OrganizationServiceProxy _serviceproxy = new OrganizationServiceProxy(organizationUri, null, cred, null);
}
Что ему не нравится? Почему локально отрабатывает, а удалённо - не хочет?
Может с IISом как-то колдовать по-хитрому надо?