Korzystam z usług danych WCF (ADO.NET Data Services). Mam model struktury encji wskazany w bazie danych AdventureWorks.Jak poprawnie hostować usługę danych WCF, która łączy się z SQLServer w IIS? Dlaczego dostaję błędy?
Po debugowaniu pliku svc z programu Visual Studio działa znakomicie. Mogę powiedzieć /awservice.svc/Customers i odzyskać kanał ATOM, którego oczekuję.
Jeśli opublikuję usługę (hostowaną w aplikacji sieci Web ASP.NET) do IIS7, ten sam ciąg zapytania zwraca błąd 500. Strona root svc działa zgodnie z oczekiwaniami i skutecznie zwraca ATOM. Ścieżka/Customers nie działa.
Oto co moje dotacje wyglądać w pliku svc:
public class AWService : DataService<AWEntities>
{
public static void InitializeService(DataServiceConfiguration config)
{
config.SetEntitySetAccessRule("*", EntitySetRights.All);
config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
}
}
Aktualizacja: Włączyłem błędy gadatliwym i uzyskać następujące w komunikacie XML:
<innererror>
<message>The underlying provider failed on Open.</message>
<type>System.Data.EntityException</type>
<stacktrace>
at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(
...
...
<internalexception>
<message>
Login failed for user 'IIS APPPOOL\DefaultAppPool'.
</message>
<type>System.Data.SqlClient.SqlException</type>
<stacktrace>
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, ...
Używam zarówno usług IIS i SQLServer na moim komputerze. * Myślę * Używam uwierzytelniania systemu Windows na obu. Znam SQLServer na pewno. W jaki sposób mogę sprawdzić IIS? –
@Pharabus - Jesteś geniuszem. Musiałem zmodyfikować konto tożsamości używane przez DefaultAppPool. Oto artykuł, jak to zrobić: http://technet.microsoft.com/en-us/library/cc771170%28WS.10%29.aspx. Domyślnie korzystał z konta o niskich przywilejach. Ustawienie go na LocalSystem rozwiązało problem. –