У меня есть WCF WebService, который обращается к данным куба с помощью AdomdConnection.Служба размещена внутри Sharepoint Server 2010.
У меня также есть веб-служба ASCX, которая вызывает службу WCF и вызывается из клиента (с использованием javascript).Все отлично работает, но есть проблема с аутентификацией.Обе службы (ASCX и WCF) размещены внутри Sharepoint.
Я получаю исключение от службы WCF при доступе к данным куба:
Either the user, NT AUTHORITY\IUSR, does not have access to the GMS1106 database, or the database does not exist.
Вот как я вызываю веб-службу WCF изasmx:
var binding = new BasicHttpBinding(BasicHttpSecurityMode.TransportCredentialOnly);
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
var endpoint = new EndpointAddress(SPContext.Current.Web.Url + GmsConfigurationReader.Current.GetParameter("OlapWebserviceEnpoint"));
var channelFactory = new ChannelFactory<IDataAccessService>(binding, endpoint);
channelFactory.Credentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
channelFactory.Credentials.Windows.ClientCredential = System.Net.CredentialCache.DefaultNetworkCredentials;
var client = channelFactory.CreateChannel();
hyperlink = client.GetFacilityHyperlink("Quarter 2 2011", "Center/Eastern Europe", "Cracow", "Machine Time Utilization");
Sharepoint appool запускается с использованием удостоверения, имеющего разрешения для куба.
Подводя итог:
- Вот так я получаю доступ к службе WCF:
JavaScript (client) -> ASCX -> WCF -> CUBE
- и нет проблем (все размещено внутри Sharepoint 2010) - WCF по какой-то причине использует встроенную учетную запись вместо учетных данных пользователя
Я проверил, и если я предоставляю разрешения NT AUTHORITY \ IUSR для куба, все работает нормально, но я на самом деле не хочусделай это.