2010-05-17 23 views
6

Bir Azure çalışan rolünde barındırılan bir ADO.Net WCF Veri Hizmeti oluşturdum. Basit bir konsol istemcisinden kimlik bilgilerinin servise iletilmesini ve sonra bir QueryInterceptor kullanarak onları doğrulamak istiyorum. Maalesef, kimlik bilgileri tel üzerinden yapılmıyor gibi görünüyor.WCF Veri Hizmetini nasıl doğrularım?

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

İşte benim Azure işçi rolündeki adminservice örneğini kullanıyorum adminservice var:

ben kullanıyorum kod basitleştirilmiş versiyonu sunucusunda DataService başlayarak almaktadır:

using System; 
using System.Data.Services; 

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

Son olarak, burada istemci kodu.

using System; 
using System.Data.Services.Client; 
using System.Net; 
using Oslo.Shared; 

namespace Oslo.ClientTest 
{ 
    public class AdminContext : DataServiceContext 
    { 
     public AdminContext(Uri serviceRoot, string userName, 
      string password) : base(serviceRoot) 
     { 
      Credentials = new NetworkCredential(userName, password); 
     } 

     public DataServiceQuery<Order> Orders 
     { 
      get 
      { 
       return base.CreateQuery<Pair>("Orders"); 
      } 
     } 
    } 
} 

Kodun, kimlik bilgilerinin telin üzerinden geçilmediği sinyal istisnasıyla harika çalıştığından bahsetmeliyim.

Bu konuda herhangi bir yardım çok takdir edilecektir! O türü DataServiceException bir istisna olmalıdır

cevap

1

teşekkürler .....

+0

Bunun nasıl tam bir cevap olduğunu göremiyorum? Kimlik bilgileri sorgu engelleyicide mevcut değilse, istisnayı her zaman alamaz mı? – tjrobinson

+0

Onun yöntemi, istisna türünü değiştirene kadar her zaman doğru döner. Yanlış kimlikleri test ediyor olmalıydı ve bunun neden olduğu konusunda kafasını karıştırmıştı. Sorunun kimlik bilgisi ile ilgili olması gerektiğini düşündü, ancak istisnanın neden atılmadığıyla ilgili gerçekten de. –

İlgili konular