Salve,
sono nuovo del forum...Anzitutto Complimenti!!!! Sto da giorni sbattendo la testa contro Google e dintorni...Ho la necessità di sviluppare un servizio in WCF che obblighi i Client, che utilizzano il servizio, a fornire le proprie credenziali di accesso (Username e Password).
Ovviamente, la prima cosa che ho fatto è stata quella di cercare su Google esempi a riguardo, ma purtroppo, ho notato che in prima istanza appaiono semplici e funzionanti, mentre in pratica non riesce nemmeno a partire il servizio del Server.
Passiamo adesso un pò la parola al Codice:
1. App.Config del Server
2. Program.cs del Server
ServiceHost host = new ServiceHost(typeof(ServiceA));
host.Open();
Console.WriteLine("Host listening ...");
Console.ReadLine();
3. CustomUserNameValidator.cs (classe per la validazione dell'Utente e si trova nel Server)
public class CustomUserNameValidator : UserNamePasswordValidator
{
public override void Validate(string userName, string password)
{
if (null == userName || null == password) {
throw new ArgumentNullException();
}
if (!(userName == "pippo" && password == "miaPassword")) {
throw new FaultException("Unknown Username or Incorrect Password");
}
}
}
4. App.Config del Client
5. Form1.cs del Client
ChannelFactory<IServiceA> factoryA = new ChannelFactory<IServiceA>("");
factoryA.Credentials.UserName.UserName = "pippo";
factoryA.Credentials.UserName.Password = "miaPassword";
m_proxyA = factoryA.CreateChannel();
m_proxyA.Operation1();
Non riesco a capire come mai la funzione Validate del CustomUserNameValidator non viene mai invocata e posso invocare l'Operation1 indipendentemente dalle credenziali, quindi accedo al servizio senza controllo aggiunto...Qualcuno ha un'idea a riguardo?
Grazie e buona programmazione a tutti!!!!