2010-11-22 1 views
0

Я написал и WCF-клиент, и удаленный интернет-сервер WCF.C#: метод добавления аутентификации WCF, имя пользователя + SSL?

Удаленный сервер WCF запускает WPF, размещенный в традиционной оболочке Windows Service (то есть не IIS).

В настоящее время он отлично работает с базовым связыванием HTTP. Я использую Visual Studio 2010 + .NET 4.0 + C#.

Может ли кто-нибудь указать мне правильные шаги, чтобы изменить мой код, чтобы я мог добавить имя пользователя + аутентификацию SSL?

EDIT:

В конце службы я переопределен UserNamePasswordValidator следующим образом:

public class CustomUserNameValidator : UserNamePasswordValidator 
{ 
    public override void Validate(string userName, string password) 
    { 
    Console.WriteLine("Got to here"); 
    } 
} 

В конце службы, я указал ссылку на класс проверки имени пользователя:

ServiceHost serviceHost = new ServiceHost(typeof(PhiFeedServer.PhiFeed)); // ,baseAddress); 

    const bool passswordAuthentication = true; 
    if (passswordAuthentication) 
    { 
    // These two lines switch on username/password authentication (see custom class "CustomUserNameValidator" in common file PhiFeed.svc.cs) 
    // See http://msdn.microsoft.com/en-us/library/aa354513.aspx 
    serviceHost.Credentials.UserNameAuthentication.UserNamePasswordValidationMode = UserNamePasswordValidationMode.Custom; 
    serviceHost.Credentials.UserNameAuthentication.CustomUserNamePasswordValidator = new CustomUserNameValidator(); 
    } 

    // Start the service 
    serviceHost.Open(); 

в конце клиента:

EndpointAddress endpointAddress = new EndpointAddress("http://localhost:20000/PhiFeed?wdsl"); 
    BasicHttpBinding serviceBinding = new BasicHttpBinding(); 
    serviceBinding.ReceiveTimeout = new TimeSpan(0, 0, 120); 
    proxy = new PhiFeedClient(serviceBinding, endpointAddress); 

    proxy.ClientCredentials.UserName.UserName = "myusername"; 
    proxy.ClientCredentials.UserName.Password = "mypassword"; 

Однако, когда я запускаю все, он даже не вызывает валидатор имени пользователя - что происходит?

+0

Работает ли она на basichttp? я бы предпочел бы привязку wsHttpBinding или net.tcp. потому что вы можете использовать сертификат с ним :). он будет защищен тогда – user507779 2010-11-25 22:09:24

+0

В моей текущей настройке используется wsHttpBinding, поэтому он может использовать сертификат. Код выше не работает должным образом. – Contango 2010-11-29 13:04:35

ответ

1

Aha! Нашел решение моей проблемы.

Microsoft предоставляет пример кода, который демонстрирует, как добавить имя пользователя/пароль + аутентификацию SSL в консольное приложение.

Поиск "Windows, Communication Foundation (WCF) и Windows Workflow Foundation, (WF) Образцы для .NET Framework 4", скачать, распаковать в C :, а затем запустить образец здесь:

C: \ WF_WCF_Samples \ WCF \ Extensibility \ Security \ UserNamePasswordValidator \ CS