gpt4 book ai didi

wcf - 如何验证 WCF 数据服务?

转载 作者:行者123 更新时间:2023-12-01 21:13:10 25 4
gpt4 key购买 nike

我创建了一个在 Azure 辅助角色中托管的 ADO.Net WCF 数据服务。我想将凭据从简单的控制台客户端传递到服务,然后使用 QueryInterceptor 验证它们。不幸的是,凭证似乎无法通过网络传递。

以下是我正在使用的代码的简化版本,从服务器上的 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;
}
}
}

这是我用来实例化我的 Azure 辅助角色中的 AdminService 的 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 类型的异常。

关于wcf - 如何验证 WCF 数据服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2851822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com