如何验证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的异常。
我不明白这是一个完整的答案?如果凭证在查询拦截器中不可用,它是否总是抛出异常? – tjrobinson 2011-02-15 09:27:52
他的方法总是返回true,直到他更改了异常类型。他一定是在测试虚假的身份,并且为什么会发生这样的事情而感到困惑。他认为这个问题应该是关于证书的,但它确实是为什么这个例外没有被抛出。 – 2011-02-18 16:33:36