WCF 数据服务使用错误的 oData 协议版本执行 sproc
WCF data service Execute sproc using wrong oData protocol version
所以我有一个 WCF 数据服务和 运行 .Net 4.5、EF6 和 WCF 数据服务 5.6,并且在 InitializeService
中有以下内容
public static void InitializeService(DataServiceConfiguration config)
{
config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
config.UseVerboseErrors = true;
}
我有一个 .Net mvc 应用程序,我也添加了一个服务引用,一切似乎都在工作和访问,但是当我尝试 return 一个 collection 复杂类型时,我出现以下错误:
Collection types are only supported in version 3.0 of the OData protocol and higher versions. They are not supported in version 1.0.
我还注意到我的 service.edmx 有 dataService v1:
<edmx:DataServices m:DataServiceVersion="1.0" m:MaxDataServiceVersion="3.0" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
我已经在 Fiddler 中使用以下存储过程和参数测试了服务 url,我可以看到它在 header 中使用 serviceVersion 1.0 但是当我尝试使用 var 作为参数时它抛出上述异常。
string querystring = string.Format("GetSecurityIdByName?securityName='{0}'", maincompany.Name);
IEnumerable<get_security_id_by_name_Result> getsecurityid = context.Execute<get_security_id_by_name_Result>(new Uri(querystring, UriKind.Relative), "GET", false);
我错过了什么?我如何强制它/使用 v3 执行存储过程?
TIA
好的,通过 SendingRequest2() 发送正确的版本解决了这个问题,但感觉很老套,而不是 "proper" 解决方案。也许它仍然是一个已知的错误 post 我是 2012 年的 Microsoft 员工!
context.SendingRequest2 += (sender, eventArgs) => {
eventArgs.RequestMessage.SetHeader("MinDataServiceVersion", "3.0;NetFx");
};
所以我有一个 WCF 数据服务和 运行 .Net 4.5、EF6 和 WCF 数据服务 5.6,并且在 InitializeService
中有以下内容 public static void InitializeService(DataServiceConfiguration config)
{
config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
config.UseVerboseErrors = true;
}
我有一个 .Net mvc 应用程序,我也添加了一个服务引用,一切似乎都在工作和访问,但是当我尝试 return 一个 collection 复杂类型时,我出现以下错误:
Collection types are only supported in version 3.0 of the OData protocol and higher versions. They are not supported in version 1.0.
我还注意到我的 service.edmx 有 dataService v1:
<edmx:DataServices m:DataServiceVersion="1.0" m:MaxDataServiceVersion="3.0" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
我已经在 Fiddler 中使用以下存储过程和参数测试了服务 url,我可以看到它在 header 中使用 serviceVersion 1.0 但是当我尝试使用 var 作为参数时它抛出上述异常。
string querystring = string.Format("GetSecurityIdByName?securityName='{0}'", maincompany.Name);
IEnumerable<get_security_id_by_name_Result> getsecurityid = context.Execute<get_security_id_by_name_Result>(new Uri(querystring, UriKind.Relative), "GET", false);
我错过了什么?我如何强制它/使用 v3 执行存储过程?
TIA
好的,通过 SendingRequest2() 发送正确的版本解决了这个问题,但感觉很老套,而不是 "proper" 解决方案。也许它仍然是一个已知的错误 post 我是 2012 年的 Microsoft 员工!
context.SendingRequest2 += (sender, eventArgs) => {
eventArgs.RequestMessage.SetHeader("MinDataServiceVersion", "3.0;NetFx");
};