ODataClient MaxProtocolVersion V3

时间:2013-08-02 09:44:39

标签: c# .net wcf odata

我试图从Windows窗体中使用OData。所以,我现在所做的是创建一个新项目,我添加了一个对OData服务的Web服务引用并尝试使用它。

我的代码是:

var VistaEntities = new VrExternalEntities("serviceURI");
var query = VistaEntities.VRtblCinemaType
            .Where(
                     x => 
                     x.VRtblCinema_Operators
                          .Any
                          (
                              z => 
                              z.VRtblSessions
                              .Any
                              (
                                   y => 
                                   y.Session_dtmDate_Time > DateTime.Now
                              )
                          )
                   )
             .Select
             (
                 x => 
                 new 
                 {
                     x.CinType_strCode, 
                     x.CinType_strDescription 
                 }
             );

如果我删除Where子句,它的工作原理。如果我这样做说任何不受支持。我知道我必须将MaxProtocolVersion设置为V3,但我不知道该怎么做。我没有实体上下文或其他任何内容。我只有我上面所说的。

请提供有关如何实现这一目标的步骤。

提前致谢。

Giannis

1 个答案:

答案 0 :(得分:1)

您必须检索configurationDataService并将MaxProtocolVersionits behavior设置为V3

执行此操作的最佳位置当然是您可以在服务类中定义的InitializeService静态方法,该方法将由环境为其config参数提供正确的配置对象。它只会被调用一次,通常是在第一次请求时。

注意#1:您需要WCF Data Services 5.0或更高版本。获得它的最佳方法可能是通过Server NuGet包。

注意#2:奇怪的是,DataServiceProtocolVersion类型虽然位于Common命名空间中,但却包含在客户端程序集(Microsoft.Data.Services.Client中,由Client NuGet包裹。我建议了一个更好的组织here

public class Vista : DataService<VistaContext>
{
    public static void InitializeService(DataServiceConfiguration config)
    {
        config.SetEntitySetAccessRule(...);
        config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
        ...
    }
}

<强>更新 通过使用DataServiceVersion HTTP标头,客户端确实可以specify the desired version in the requests。如果可以的话,目前建议您使用MinDataServiceVersionMaxDataServiceVersion标头指定并支持一系列版本,原因很明显。但请注意,MinDataServiceVersion中的{{1}}将被删除(参见第1部分附录E.1和“新内容”文件草稿)。

WCF Data Services 5.x实施的相关文档可用OData 4.0。特定于客户端的文档似乎很少,但是查看参考文献,您可以看到必须使用here this constructor来指定最大协议版本,它看起来像{{3}在任何一点上为后续请求而不重建新上下文。您可以直接尝试DataServiceContext,但我不希望它可靠地(或根本)工作。

因此,要回答您的问题,您确实需要控制如何为客户创建上下文。