0

我对 ADO.NET/WCF 数据服务完全陌生。在我第一次设置和测试 ADO.NET 数据服务时,我遇到了这个令人费解的错误:

响应要求使用协议的版本 2,但数据服务的 MaxProtocolVersion 设置为 DataServiceProtocolVersion.V1。

网上的参考资料表明我需要设置:

config.DataServiceBehavior.MaxProtocolVersion = Common.DataServiceProtocolVersion.V2

但是,此属性在 IntelliSense 中不可用,并且在我手动编码时会产生构建错误。

我正在使用 Visual Studio 2008 SP1、.NET 3.5 SP1 和 VB.NET。如何启用协议的第 2 版?

4

1 回答 1

1

经过大约一天半的搜索(并重新应用 VS2008 SP1),这篇博客文章终于把事情弄清楚了:

Astoria V.Next 适用于 .NET 3.5 SP1 -> 版本控制问题

事实证明,我的安装一切正常,但我忽略了 InitilizeService() 方法的签名发生了如此微妙的变化这一事实。正如斯蒂芬福特在他的博客中指出的那样:

 1:  //change the IDataServiceConfiguration to DataServiceConfiguration
 2:  public static void InitializeService(DataServiceConfiguration config)
 3:  {
 4:      config.SetEntitySetAccessRule("*", EntitySetRights.All);
 5:      //take advantage of the "2.0" features
 6:      config.DataServiceBehavior.MaxProtocolVersion =
 7:          System.Data.Services.Common.DataServiceProtocolVersion.V2;
 8:  }

您需要更改的第一件事是在第 2 行,将接口IDataServiceConfiguration更改为只是DataServiceConfiguration(我确信有更好的方法可以做到这一点,我还没有想出来。)。接下来,将 DataServiceBehavior 的 MaxProtocolVersion 属性设置为 V2。之后,您可以利用所有新功能!

强调我的。一个简单的“我”所带来的不同是惊人的。为了回答斯蒂芬的担忧,这也得到了 MSDN 的支持,但他们目前没有指出引用接口与实现对象的区别:

配置数据服务(ADO.NET 数据服务)

这是VB中的代码:

'change the IDataServiceConfiguration to DataServiceConfiguration
Public Shared Sub InitializeService(ByVal config As DataServiceConfiguration)
    config.SetEntitySetAccessRule("*", EntitySetRights.All)
    'take advantage of the "2.0" features
    config.DataServiceBehavior.MaxProtocolVersion = System.Data.Services.Common.DataServiceProtocolVersion.V2
End Sub

编译,测试,通过。我刚刚迈出了迈向更大世界的第一步……

于 2013-01-11T20:39:57.227 回答