2009-05-14 22 views
7

İstemci ve sunucu arasında iletişim kurmak için WCF kullanan basit bir Uygulama yazdım. Kimlik bilgileri kabul edilmiyor NeBir WCF uygulaması için kimlik bilgilerini ayarlama?

Unexpected error occured, while getting the group names from the VDN server 
System.ServiceModel.Security.SecurityNegotiationException: The server has rejected the client credentials. 
System.Security.Authentication.InvalidCredentialException: The server has rejected the client credentials. 
System.ComponentModel.Win32Exception: The logon attempt failed 

: Ben iyi çalışır yerel olarak çalıştırdığınızda, ben aşağıdaki özel durum alıyorum iki farklı kutulara sunucu ve istemci çalıştırın ancak zaman? Ve onları nasıl kurabilirim?

Sunucuyu kimlik doğrulaması gerektirmeyecek şekilde yapılandırmanın bir yolu var mı? Uygulama güvenliği için basit bir izleme uygulaması gerçekten bir sorun değildir. çok özel olmamakla ilgili

Maalesef: uygulaması bir boru proxy kullanır ve el kodlanmıştır wcf kodu olarak hiçbir wcf yapılandırma dosyası vardır.

Benim WCF kodu Bu eğitimde koduna dayanmaktadır: http://www.switchonthecode.com/tutorials/wcf-tutorial-basic-interprocess-communication

Ben tüm kod yazmadan bitmiş vardı sonra kadar bir yapılandırmasındaki wcf sınıflar oluşturmak için standart proctice oldu konw vermedi. Şimdi bir öğretici/yardım doktora baktığımda, oluşturulan kodu kullanıyorlar ve her şey yapılandırmayı değiştirmeyi gerektiriyor.

Wcf bileşenimi tek bir kullanımla oluşturulan kodla değiştirmek için bant genişliğim yok (zaten 3 projeyi hokkabaz yapıyorum) ama bir dahaki sefere wcf kullandığımda kod nesnesini kullandığınızdan emin olacağım.

+0

Daha spesifik olmanız gerektiğini düşünüyorum. Kullandığınız bağ nedir? –

cevap

5

böyle bir yöntemi oluşturun ...

void SetImpersonation(ref IServiceClient proxy) 
{ 
    proxy.ClientCredentials.Windows.ClientCredential.Domain = "MYDOMAIN"; 
    proxy.ClientCredentials.Windows.ClientCredential.UserName = "A_USER"; 
    proxy.ClientCredentials.Windows.ClientCredential.Password = "P4SSW0RD"; 
} 

ve oluşturduğunuz zaman diyoruz yeni müşteri sınıfı.

IServiceClient proxy = new IServiceClient(); 
SetImpersonation(ref proxy); 

obvously, bu belirli bir kullanıcıyı olmaya ayar bilgileri ve kodunuzu decompiled eğer güvenlik etkileri vardır, ancak bu ise

+0

Bu değerleri app.config dosyasına taşıyabilirim. Sadece wcf kodu için bir yapılandırma dosyası yok. Bu iyi görünüyor olsa da. –

+0

İstemcimin her kullanımında bunu nasıl ayarlayabilirim? Çözümümdeki tüm müşteriler için bunu ayarlamanın bir yolu var mı? – SomeRandomName

11

Wcf güvenliğini/kimlik doğrulamasını devre dışı bırakmak için bir aramada bulduğum bir çözüm.

MSDN itibaren

:

WSHttpBinding b = new WSHttpBinding(); 

b.Security.Mode = SecurityMode.None; 

veya config aşağıdakileri ekleyin:

<wsHttpBinding> 

    <binding name="myBinding"> 

     <security mode="None" /> 

    </binding> 

</wsHttpBinding> 
+0

Özgün istisna Windows Kimlik Doğrulaması kullanılarak bir ciltleme yapılandırmasından kaynaklanabileceğinden, bu çözümü kullanmak için dikkatli bir şekilde atlama yapmalısınız. Bu durumda güvenliği körü körüne kaldırmak kötü bir fikirdir. Windows Kimlik Doğrulaması'nın kullanılması durumunda cevabımı kontrol edin. – atconway

+0

İyi çalışıyor, teşekkürler :) –

1

sizin (yapılandırma dosyası-az senaryoda) içinde çalışması gerekir edilir aşağıdaki güvenlik ile bir WCF bağlama yapılandırmayı kullanarak:

o zaman açıkça aşağıda gibi kodda oluşturulan WCF örneğinde, Windows Kimlik ayarlamak gerekir
<transport clientCredentialType="Windows" /> 

:

'Create an instance of the WCF service  
Dim MyService As New MyWCFServiceClient 

'Build credentials object for which this WCF call will be made 
MyService.ClientCredentials.Windows.ClientCredential = New System.Net.NetworkCredential("UserName", "Password", "DomainName") 

'Call a method on the service 
MyService.MyMethod1() 
İlgili konular