我的asp.net网站上有一个WCF数据服务,如下所示:
public class WcfDataService : DataService<MyEntities>
{
// This method is called only once to initialize service-wide policies.
public static void InitializeService(DataServiceConfiguration config)
{
config.SetEntitySetAccessRule("*", EntitySetRights.All);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
}
protected override Data.Sub.TcSubEntities CreateDataSource()
{
// if user is logged in enable him to query database otherwise do not
if (HttpContext.Current.Session["user"] != null)
{
return base.CreateDataSource();
}
else
{
return null;
}
}
}
我的客户首先调用 myDomain.com/Authenticate.aspx 页面,然后将HttpContext.Current.Session["user"]
设置为等于用户的ID。
无论如何客户端是一个控制台应用程序,我已经设置了对该数据服务的引用。我想查询数据库的方式如下:
var db = new ServiceReference.MyEntities(new Uri("MyDomain/WcfDataService.svc"));
var customers = db.Customers.ToList();
我使用 How do I log into a site with WebClient? 为了能够访问我网站上的网页。 我如何使用该webclient连接到我的wcf数据服务,以便我可以使用相同的会话?
PS
如果我有会话ID,我可以通过url作为参数传递吗?
答案 0 :(得分:0)
终于找到了解决方案。我管理如何在请求中添加cookie。在客户端我做了:
注意我正在使用来自Using CookieContainer with WebClient class
的Cookie感知网络客户端var cookieAwareWebClient= //.... authenticate
var db = new ServiceReference.MyEntities(new Uri("MyDomain/WcfDataService.svc"));
db.SendingRequest += ( s, arg) =>
{
HttpWebRequest httpRequest = arg.Request as HttpWebRequest;
httpRequest.CookieContainer = cookieAwareWebClient.CookieContainer; // I made that property public
};
var myUsers = db.Users.ToList();