2009-02-22 14 views
11

Występuje problem z używaniem WebServiceHostFactory w IIS.Uwierzytelnianie WebServiceHostFactory i IIS

"Określone schematy uwierzytelniania IIS" IntegratedWindowsAeghentication, Anonymous ", ale powiązanie obsługuje tylko specyfikację dokładnie jednego schematu uwierzytelniania.Ważne schematy uwierzytelniania to Digest, Negotiate, NTLM, Basic lub Anonymous. Zmień ustawienia IIS tak, aby tylko używany jest jeden schemat uwierzytelniania. "

I wanted to keep both authentication schemes and managed to do so by not using the factory but setting up the endpoint manualy in web.config.

Moje pytanie brzmi, co się robi, aby uzyskać WebServiceHostFactory ten wynik? Miałem wrażenie, że WebServiceHostFactory ustawiłby powiązanie z tym samym webHttpBinding, którego używałem w mojej konfiguracji.

Edytuj: Spojrzałem na WebServiceHostFactory w odbłyśniku i nie robi nic mądrego. To jest po prostu prosta fabryka dla WebServiceHost.

Czy usługi IIS nadal używają hosta usług, jeśli skonfigurowałeś punkt końcowy w konfiguracji? Lub jest WebServiceHost ustawienie rzeczy inaczej.

Odpowiedz

3

To właśnie dla mnie zadziałało. Dodanie obojętnego punktu końcowego wcześnie (przed otwarciem hosta usługi), jak pokazano poniżej, najwyraźniej udało się. (Ten artykuł MSDN napomknął o tym http://msdn.microsoft.com/en-us/library/bb412178.aspx.)

public class MyWebServiceHost : WebServiceHost 
{ 
    public MyWebServiceHost (Type serviceType, params Uri[] baseAddresses) : base(serviceType, baseAddresses) 
    { 
     // Inserting this dummy endpoint config seemingly does the trick: 
     AddServiceEndpoint(typeof(IMyContract), new WebHttpBinding(), string.Empty); 
    } 

    protected override void ApplyConfiguration() 
    { 
     // Typical programmatic configuration here per: 
     // http://msdn.microsoft.com/en-us/library/aa395224.aspx 
    } 
} 

Zgaduję zapobiega WebServiceHost od tworzenia domyślnego punktu końcowego, a tym samym zamykając pęczek funkcjonalności.

+0

Nie jestem w stanie przetestować tej odpowiedzi, ponieważ zostało to zadane jakiś czas temu i rozwiązałem problem, a następnie dostałem nową pracę, ale jeśli powiesz, że to działa, to jest wystarczająco dobre dla mnie. –

+0

Nie rozumiem, gdzie powinienem odnosić się do MyWebServiceHost – JDC

+0

Miałem ten sam problem i mogłem go uruchomić. Musiałem napisać dwie klasy: 'MyWebServiceHostFactory' oraz' MyWebServiceHost'. W klasie fabrycznej przesłoniłem metodę 'ServiceHost CreateServiceHost (Type serviceType, Uri [] baseAddresses) i zwróciłem instancję' MyWebServiceHost'. 'MyWebServiceHost' wygląda jak ten w tej odpowiedzi, ale nie zastąpiłem' ApplyConfiguration() '. –

1

Nie jestem pewien co do WebServiceHostFactory, ale wygląda na to, że hostujesz usługę wewnątrz IIS i wybrano więcej niż jedną metodę uwierzytelniania. Jeśli masz IIS 5 lub 6, spróbuj przejść do IIS i przejrzeć właściwości strony internetowej lub katalogu wirtualnego zawierającego twoją usługę. Przejdź do karty Zabezpieczenia katalogu, kliknij przycisk Edytuj w obszarze "Dostęp anonimowy i kontrola uwierzytelnienia", a następnie usuń zaznaczenie "Dostęp anonimowy" lub "Zintegrowane uwierzytelnianie systemu Windows". Nie jestem pewien co do IIS7.

+1

Problem z tym jest to, że wtedy ** nie może debugować anonimowo odwiedzona ** strona internetowa. ** ** niezadowalająca ** praca wokół polega na kompilacji z pojedynczym uwierzytelnieniem, tuż przed debugowaniem, aby włączyć drugie, w IIS. To działa, ale jest czas tracić czas i denerwujące. Widziałem serwisy .NET 3.5 rozwijane przez lata bez tego problemu. W przypadku witryn .NET 4 moje doświadczenia były gorsze. _ (Istnieje możliwość zmiany uwierzytelniania strony internetowej z pliku MSBuild, ale nie mogłem znaleźć gotowego zadania do zrobienia.) _ –

+0

, który mi pomógł, wspaniałe znalezisko! – Adi

+1

Przepraszamy, ale powiedział, że chciał zachować oba schematy uwierzytelniania ... Twoja odpowiedź nie była pomocna w tym zakresie. – LDAdams

1

W sekcji IIS7 może nie być miejsca, w którym można zarządzać ustawieniem Zintegrowane uwierzytelnianie systemu Windows. Aby zobaczyć ustawienie w konsoli zarządzania IIS7, należy wykonać kroki opisane w następującym artykule: http://msdn.microsoft.com/en-us/library/x8a5axew.aspx (o nazwie "Błąd: debugowanie nie powiodło się, ponieważ zintegrowane uwierzytelnianie systemu Windows nie jest włączone", jeśli łącze nie działa).

Mam nadzieję, że to pomaga.

-1

bezpieczeństwa wyłączyć w web.config-> tag konfiguracja

<system.serviceModel> 
    <bindings> 
     <webHttpBinding> 
     <binding> 
      <security mode="None"> 
      <transport clientCredentialType="Windows"/> 
      </security> 
     </binding> 
     </webHttpBinding> 
    </bindings> 
    </system.serviceModel> 

następnie usługa WCF nie wymaga uwierzytelnienia ...

+0

To tylko niektóre z kodów ... proszę podać wyjaśnienie. To nie jest odpowiedź na pytanie. –

+0

Naprawdę trzeba podać jakąś formę wyjaśnienia (a nie tylko próbkę kodu) podczas udzielania odpowiedzi. –

Powiązane problemy