数据源为lightswitch 提供的ODATA服务,本质就是ASP.NET 的WCF data service .
IIS 下站点使用的是FORMS验证方式。
现在使用WPF客户端来消费这个ODATA,通过在客户端添加引用,目前可以获取或操作ODATA数据。但在使用时发现二个问题,不知如何解决(估计是一个问题引起的)。先上代码。
OmsProxy.ApplicationData dataSvc = null;
dataSvc =new OmsProxy.ApplicationData( new Uri("http://localhost/oms/ApplicationData.svc/")); //此处使用其他正式生产服务器,也是一样问题
dataSvc.Format.UseJson();
dataSvc.Credentials = new NetworkCredential("user", "pwd"); form认证用户名及密码
二个调用数据的处理(button 一次点击)
var query = from a in dataSvc.OrderBills select a;
MessageBox.Show(query.ToList().Count.ToString());
var query1 = from b in dataSvc.PayInfos select b;
MessageBox.Show(query1.ToList().Count.ToString());
以上数据能正常调用(一次按钮事件,连续调用二次),新增也没有问题。主要问题表现为:
按MS官网解释如下:
WCF 数据服务是无状态的,但 DataServiceContext 却不是。 在交互之间将保持客户端上的状态,以便支持更新管理这样的功能。 此类以及表示数据服务的特定 HTTP 请求的
按上面解释:DataServiceContext 是有状态的,但我二次调用,通过Fiddler4监控及Sql server Profiler监控结果为表现下面二种情况:
1.Fiddler 里第一次调用,会出现二次请求,第一次为
401 - 未授权: 由于凭据无效,访问被拒绝。 ,紧跟着 第二次请求,能获取数据。 所以上面代码结果为一共四次。二次正确的结果,HTTP里COOKIE也不一样的。2.Profiler 每一次调用都会调用membership 进行用户验证,再执行我需要执行的SQL语句。二次调用会进行二次用户验证。
DataServiceContext 如何通过一个SESSION进行处理?