WCF数据服务使用错误的oData协议版本执行sproc

时间:2015-10-18 17:41:39

标签: 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.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中使用下面的sproc和参数测试了服务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);

我缺少什么?我如何使用v3强制它/执行sproc?

TIA

1 个答案:

答案 0 :(得分:2)

好的,通过SendingRequest2()发送正确的版本修复了问题,但感觉很烦,而不是&#34;正确的&#34;解。也许它仍然是一个已知的错误,根据这篇文章,我是一名来自2012年的微软员工!

https://social.msdn.microsoft.com/Forums/en-US/3a735526-59a9-494d-9240-7107e1ccceae/return-iqueryable-of-dtos-from-serviceoperation?forum=adodotnetdataservices

context.SendingRequest2 += (sender, eventArgs) => {
    eventArgs.RequestMessage.SetHeader("MinDataServiceVersion", "3.0;NetFx");
};