2

我正在研究开放数据协议 (OData),它是一种用于创建和使用数据 API 的标准化协议。

OData建立在核心协议HTTP(如REST.

我已经在iOS6 上成功安装、配置和构建了OData

目前,我正在创建一个代理类以使用以下命令连接到OData 服务:

cd /Users/Shamsu/Applications/ODataObjC/ODataSDKV1-1.3/Framework/bin/ODatagenBinary/MacOSX10.7.sdk/Debug

./odatagen /uri=http://35.35.6.4/MyApp.MyApp3D.DataService/MyApp3DDataService.svc/ /out=/Users/Ramshad/Applications/ODataObjC/ODataSDKV1-1.3/Framework/bin/ODatagenBinary/MacOSX10.7.sdk/Debug  /u=sa /p=123

但是,我收到了错误:"odatagen: Failed to generate proxy classes. Please verify the metadata"

我可以看到“metadata.xml”文件更新为

<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="1.0" xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx">
  <edmx:DataServices m:DataServiceVersion="1.0" m:MaxDataServiceVersion="3.0" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
    <Schema Namespace="MyAppDBModel" xmlns="http://schemas.microsoft.com/ado/2009/11/edm">
      <EntityType Name="User">
        <Key>
          <PropertyRef Name="UserID" />
        </Key>
        <Property Name="UserID" Type="Edm.Guid" Nullable="false" />
        <Property Name="UserName" Type="Edm.String" MaxLength="10" FixedLength="true" Unicode="true" />
        <Property Name="UserDescription" Type="Edm.String" MaxLength="50" FixedLength="false" Unicode="true" />
        <Property Name="Active" Type="Edm.Int64" />
      </EntityType>
    </Schema>
    <Schema Namespace="MyApp.MyApp3D.DataService" xmlns="http://schemas.microsoft.com/ado/2009/11/edm">
      <EntityContainer Name="MyAppDBEntities" m:IsDefaultEntityContainer="true" p6:LazyLoadingEnabled="true" xmlns:p6="http://schemas.microsoft.com/ado/2009/02/edm/annotation">
        <EntitySet Name="User" EntityType="MyAppDBModel.User" />
      </EntityContainer>
    </Schema>
  </edmx:DataServices>
</edmx:Edmx> "

注意metadata.xml文件位于输出参数位置(/Users/Ramshad/Applications/ODataObjC/ODataSDKV11.3/Framework/bin/ODatagenBinary/MacOSX10.7.sdk/Debug /metadata.xml)

我无法确定问题所在。我的Windows WCF 服务/ODataService 配置/数据库配置有什么问题吗?分配为 *(读、写)的权限。

对此问题的任何帮助表示赞赏。

谢谢。

4

1 回答 1

0

我仔细查看了我在原始评论中链接到的 XSLT 文档,似乎尚未更新 odatagen 工具以与 CSDL v3 一起使用。CSDL 的版本(即用于序列化元数据文档的格式)由 Schema 元素的 xml 命名空间指示。在您的元数据中,该命名空间是http://schemas.microsoft.com/ado/2009/11/edm,表示 CSDL v3。您可以在此处的 XSLT 文档中看到,odatagen 工具无法识别此名称空间。

由于 odatagen 工具是开源的(请参阅github 上的源代码),您可以尝试调整代码和 XSLT 文件以使其适合您的情况。您可以尝试将 v3 名称空间添加到已识别的模式名称空间中,如果您的元数据不使用任何 v3 功能,我想它会正常工作。在我的脑海中,我不确定 v2 和 v3 之间的确切区别,所以我不能立即说明您在上面发布的元数据在 CSDL v2 中是否有效。

或者,您可以尝试生成 $metadata 文档,以便它改用 CSDL v2。

对不起,我没有更好的答案给你。不幸的是,odatagen 工具有点落后。但是非常欢迎您为该项目做出贡献:)

于 2013-04-12T17:51:03.547 回答