【问题标题】:WCF data service client connect using sessionWCF 数据服务客户端使用会话连接
【发布时间】:2014-03-06 21:33:06
【问题描述】:

我的 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? 以便能够访问我网站上的页面。 如何使用该网络客户端连接到我的 wcf 数据服务,以便可以使用相同的会话?

PS

如果我有会话 ID,我可以通过 url 作为参数传递它吗?

【问题讨论】:

  • 如果我没记错的话,如果你的会话设置为不使用 cookie,你可以通过 url 传递它。否则,您必须将会话 ID 放入 cookie 并通过标头将其添加到您的请求中以传递会话 ID。

标签: c# session wcf-data-services


【解决方案1】:

终于找到了解决办法。我管理如何将 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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-27
    相关资源
    最近更新 更多