如何验证WCF数据服务?

如何验证WCF数据服务?

问题描述:

我创建了一个 ADO.Net 以Azure辅助角色工作的WCF数据服务。我想从简单的控制台客户端向服务传递凭证,然后使用QueryInterceptor验证它们。不幸的是,证书似乎并没有通过电报。如何验证WCF数据服务?

以下是我使用的代码的简化版本,在服务器上开始DataService在:

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

下面是我用实例化AdminService我在Azure的辅助角色的AdminService:

using System; 
using System.Data.Services; 

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

最后,这里是客户端代码。

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

我应该提到的是,代码可以很好地处理信号异常,即证书不会通过线路传递。

在这方面的任何帮助将不胜感激!

感谢....

你必须抛出型DataServiceException的异常。

+0

我不明白这是一个完整的答案?如果凭证在查询拦截器中不可用,它是否总是抛出异常? – tjrobinson 2011-02-15 09:27:52

+0

他的方法总是返回true,直到他更改了异常类型。他一定是在测试虚假的身份,并且为什么会发生这样的事情而感到困惑。他认为这个问题应该是关于证书的,但它确实是为什么这个例外没有被抛出。 – 2011-02-18 16:33:36