2009-02-22 42 views
11

WebServiceHostFactory'yi IIS'de kullanma konusunda bir sorunla karşılaşıyorum.WebServiceHostFactory ve IIS kimlik doğrulaması

"IIS belirtilen kimlik doğrulama şemaları 'IntegratedWindowsAuthentication, Anonymous', ancak yalnızca tam bir kimlik doğrulama şemasının belirtimini destekler. Ancak, kimlik doğrulama şemaları Özet, Anlaşma, NTLM, Temel veya Anonimdir. IIS ayarlarını değiştirir. Tek kimlik doğrulama şeması kullanılır. "

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.

Sorum WebServiceHostFactory bu sonucu elde etmek için yapıyor nedir? WebServiceHostFactory'nin, yapılandırmamda kullandığım aynı webHttpBinding öğesine bağlanmayı ayarlayacağı izleniminin altındaydım.

Düzenleme: WebServiceHostFactory'ye yansıtıcıda baktım ve akıllıca bir şey yapmıyor. WebServiceHost için sadece basit bir fabrikadır.

Yapılandırmada bitiş noktasını ayarlarsanız, IIS hala bir hizmet ana bilgisayarı kullanıyor mu? Ya da WebServiceHost ayarı farklı şekilde ayarlanıyor.

cevap

3

Bu benim için çalıştı. Aşağıda gösterildiği gibi (hizmet sunucusu açılmadan önce) bir kukla bitiş noktası eklemek, hile yapmış gibi görünüyor. (Bu MSDN makalesi bu http://msdn.microsoft.com/en-us/library/bb412178.aspx ima.) Bunun bir varsayılan bitiş noktası oluşturma ve böylece işlevsellik bir demet kapanmasını WebServiceHost engeller tahmin ediyorum

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 
    } 
} 

. web.config- içinde

+0

Bu cevabı bir süre önce sorulduğu için test edemiyorum ve bu sorunun çevresinde çalıştım, sonra yeni bir iş buldum ama eğer çalıştığını söylersen o zaman benim için yeterince iyi. –

+0

MyWebServiceHost – JDC

+0

'un aynı soruna neden başvurduğumu anlamıyorum ve çalışmayı başarabildim. İki sınıf yazmak zorunda kaldım: “MyWebServiceHostFactory” ve “MyWebServiceHost”. Fabrika sınıfında, "ServiceHost CreateServiceHost (Type serviceType, Uri [] baseAddresses) yöntemini geçersiz kıldım ve" MyWebServiceHost "örneğini döndürdüm. MyWebServiceHost, bu yanıttaki gibi görünüyor, ancak ben ApplyConfiguration() 'i geçersiz kılmamıştım. –

1

WebServiceHostFactory hakkında emin değilim, ancak hizmeti IIS içinde barındırıyormuşsunuz gibi görünüyor ve birden çok kimlik doğrulama yöntemi seçili. IIS 5 veya 6’nız varsa, IIS’ye girmeyi ve hizmetinizi içeren web sitesi veya sanal dizinin özelliklerini görüntülemeyi deneyin. Dizin Güvenliği sekmesine gidin, "Anonim erişim ve kimlik doğrulama kontrolü" altındaki Düzenle düğmesini tıklayın ve ardından "Anonim erişim" veya "Tümleşik Windows kimlik doğrulaması" öğelerinin işaretini kaldırın. IIS7'den emin değilim.

+1

Sorun daha sonra ** Bir debug olamaz ki ihtiyacı yok anonim olarak erişilen ** web sitesi. Bir ** tatmin edici olmayan ** etrafında çalışmak, tek bir kimlik doğrulaması ile derlemek, daha sonra IIS'de diğerini değiştirmeden hata ayıklamaktır. Bu çalışır, ancak zaman kaybı ve can sıkıcıdır. Bu sorun olmadan yıllar boyunca geliştirilen .NET 3.5 sitelerini gördüm. .NET 4 siteleri ile deneyimlerim daha da kötüydü. _ (MSBuild dosyasından web sitesi kimlik doğrulamasını değiştirmek için bir olasılık var, ancak bunu yapmak için hazır bir görev bulamadım.) _ –

+0

benim için hile yaptı, harika bulma! – Adi

+1

Maalesef, her iki kimlik doğrulama planını da korumak istediği söyleniyor ... Cevabınız bu konuda yardımcı olmadı. – LDAdams

1

IIS7 altında, Tümleşik Windows Kimlik Doğrulaması ayarını nerede yönetebileceğinizi bulamadınız. IIS7 yönetim konsolundaki ayarı görmek için, aşağıdaki makalede açıklanan adımları uygulamanız gerekir: http://msdn.microsoft.com/en-us/library/x8a5axew.aspx ("Bağlantı: İşlevsel değilse," Tümleşik Windows Kimlik Doğrulaması Etkin Değil Olarak Hata Ayıklanıyor "başlıklı başlık).

Yardım edin.

-1

devre dışı güvenlik> yapılandırma etiketi

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

ardından wcf hizmeti kimlik ... bununla

+0

Bu sadece bir kod ... lütfen biraz açıklama sağlayın. Sorunun cevabı değil. –

+0

Bir yanıt verirken gerçekten bir açıklama formu (sadece bir kod örneği yerine) vermeniz gerekir. –