【问题标题】:WCF data service Execute sproc using wrong oData protocol versionWCF 数据服务使用错误的 oData 协议版本执行存储过程
【发布时间】:2015-10-18 17:41:38
【问题描述】:

所以我有一个 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 强制它/执行存储过程?

TIA

【问题讨论】:

    标签: c# .net odata wcf-data-services


    【解决方案1】:

    好的,通过 SendingRequest2() 发送正确的版本解决了这个问题,但感觉很麻烦,而不是“正确”的解决方案。根据我 2012 年的 Microsoft 员工这篇文章,这可能仍然是一个已知的错误!

    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");
    };
    

    【讨论】:

    • 当从 OData 服务返回的 IEnumerable 为空时,我还必须添加此调用。它仍然感觉很老套。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    • 1970-01-01
    • 2015-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多