2010-05-17 9 views
6

Ich habe einen ADO.Net WCF-Datenservice erstellt, der in einer Azure-Worker-Rolle gehostet wird. Ich möchte Credentials von einem einfachen Konsolenclient an den Service übergeben und sie dann mit einem QueryInterceptor validieren. Leider scheinen die Anmeldeinformationen nicht über die Leitung zu gehen.Wie authentifiziere ich einen WCF-Datenservice?

Das Folgende ist eine vereinfachte Version des Codes Ich verwende, auf dem Server mit dem Data Start:

using System; 
using System.Data.Services; 
using System.Linq.Expressions; 
using System.ServiceModel; 
using System.Web; 

namespace Oslo.Worker 
{ 
    [ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)] 
    public class AdminService : DataService<OsloEntities> 
    { 
     public static void InitializeService(
      IDataServiceConfiguration config) 
     { 
      config.SetEntitySetAccessRule("*", EntitySetRights.All); 
      config.SetServiceOperationAccessRule("*", ServiceOperationRights.All); 
     } 

     [QueryInterceptor("Pairs")] 
     public Expression<Func<Pair, bool>> OnQueryPairs() 
     { 
      // This doesn't work!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
      if (HttpContext.Current.User.Identity.Name != "ADMIN") 
       throw new Exception("Ooops!"); 

      return p => true; 
     } 
    } 
} 

Hier ist die Admin ich bin mit dem Admin in meiner Azure Arbeiter Rolle zu instanziiert:

using System; 
using System.Data.Services; 

namespace Oslo.Worker 
{ 
    public class AdminHost : DataServiceHost 
    { 
     public AdminHost(Uri baseAddress) 
      : base(typeof(AdminService), new Uri[] { baseAddress }) 
     { 
     } 
    } 
} 

Und schließlich, hier ist der Client-Code.

Ich sollte erwähnen, dass der Code gut mit der Ausnahme Signal funktioniert, dass die Anmeldeinformationen nicht über die Leitung übergeben werden.

Jede Hilfe in dieser Hinsicht würde sehr geschätzt werden!

Danke ....

Antwort

1

Sie müssen eine Ausnahme vom Typ DataServiceException werfen.

+0

Ich sehe nicht, wie das eine vollständige Antwort ist? Wenn die Berechtigungsnachweise im Abfragebefehl nicht verfügbar sind, löst dies nicht immer die Ausnahme aus? – tjrobinson

+0

Seine Methode würde immer true zurückgeben, bis er den Ausnahmetyp geändert hat. Er muss falsche Identitäten getestet haben und war verwirrt darüber, warum dies geschah. Er dachte, die Frage sollte sich um Anmeldeinformationen drehen, aber es ging wirklich darum, warum die Ausnahme nicht ausgelöst wurde. –

Verwandte Themen