Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WCF数据服务使用错误的oData协议版本执行存储过程_C#_.net_Odata_Wcf Data Services - Fatal编程技术网

C# WCF数据服务使用错误的oData协议版本执行存储过程

C# WCF数据服务使用错误的oData协议版本执行存储过程,c#,.net,odata,wcf-data-services,C#,.net,Odata,Wcf Data Services,因此,我有一个WCF数据服务,并与.Net 4.5、EF6和WCF数据服务5.6一起运行,并且在InitializeService中有以下内容 public static void InitializeService(DataServiceConfiguration config) { config.SetEntitySetAccessRule("*", EntitySetRights.AllRead); config.SetServiceOper

因此,我有一个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应用程序,我也添加了一个服务引用,所有内容都可以正常工作和访问,但是当我尝试返回一个复杂类型集合时,出现以下错误:

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,我可以看到它在标头中使用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);
string querystring=string.Format(“GetSecurityIdByName?securityName='{0}',maincompany.Name”);
IEnumerable getsecurityid=context.Execute(新Uri(querystring,UriKind.Relative),“GET”,false);
我错过了什么?如何使用v3强制执行存储过程


TIA

好的,通过SendingRequest2()发送正确的版本解决了问题,但感觉有问题,不是“正确”的解决方案。也许这仍然是一个已知的错误,因为这篇文章是我2012年的一名微软员工写的


当从OData服务返回的IEnumerable为空时,我也必须添加这个调用。它仍然感觉不舒服。
context.SendingRequest2 += (sender, eventArgs) => {
    eventArgs.RequestMessage.SetHeader("MinDataServiceVersion", "3.0;NetFx");
};