2010-04-28 6 views
7

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, ... 

Odpowiedz

8

to wygląda tak jak to jest błąd uwierzytelniania SQL, IIS uruchamia swój appPool pod użytkownikiem, który nie ma dostępu do twojego serwera SQL, kiedy zepsujesz w Visual Studio (lokalnie) będzie to inny użytkownik. Sprawdź użytkownika, czy używa IIS na serwerze i upewnij się, że ma uprawnienia do robienia tego, co chcesz w SQL.

+0

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? –

+2

@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. –

1

Spróbuj zmienić Integrated Security atrybut ciąg połączenia do Fałsz

0

Szybkie rozwiązanie z IIS Express,

  1. utworzyć wyjątek zapory, aby umożliwić żądań HTTP przez zaporę w sprawie port używany przez IIS Express.

  2. Uzyskaj adres IP komputera programistycznego, jeśli to konieczne, uruchamiając ipconfig.

  3. Znajdź plik konfiguracyjny IIS Express, applicationhost.config, w folderze% USERPROFILE% \ Documents \ IISExpress \ config. Zmienna środowiskowa USERPROFILE zwykle ma wartość C: \ Users \.

  4. Otwórz program applicationhost.config za pomocą Notatnika lub innego edytora tekstu i wprowadź następujące zmiany.

  5. Znajdź element witryny dla usługi sieci Web, WebServiceForTesting. Jeśli nie widzisz elementu serwisu dla usługi WWW, musisz wdrożyć tę usługę co najmniej jeden raz, aby utworzyć element.

  6. W sekcji wiązaniami elementu stronie skopiuj i wklej elementu wiążącego kopię bezpośrednio poniżej istniejącego elementu wiążącego stworzyć drugi wiążące. W nowym elemencie wiążącym, zastąp localhost adresem IP komputera. Zapisz zmiany.

  7. Uruchom narzędzie Visual Studio jako administrator i otwórz rozwiązanie Visual Studio.

  8. W projekcie aplikacji telefonu usuń odniesienie do usługi, jeśli wcześniej ją dodałeś. Dodaj nowe odniesienie do usługi do przekonfigurowanego serwisu internetowego. W oknie dialogowym Dodawanie odniesienia usługi, w polu Adres zastąp localhost adresem IP komputera programistycznego. Kliknij Przejdź.

  9. Drugie powiązanie dla usługi w projekcie WCF zostaje wykryte i wyświetlone. Kliknij OK.

  10. Nowe odniesienie do usługi, które wykorzystuje adres IP komputera programistycznego, jest dodawane do projektu Windows Phone.

+0

Witam, witam w StackOverflow! Twoja odpowiedź wydaje się być w porządku, ale będzie znacznie czytelniejsza, jeśli podzielisz ją na kilka akapitów lub nawet skorzystasz z listy numerowanej/biuletynu. – Benesh