odatagen:无法生成代理类。请验证元数据(iOS)

时间:2013-04-04 07:58:40

标签: iphone ios objective-c wcf odata

我正在开发 Open Data Protocol (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配置/数据库配置有任何问题吗?权限分配为*(读,写)。

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

感谢。

1 个答案:

答案 0 :(得分:0)

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

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

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

抱歉,我没有更好的答案。不幸的是,odatagen工具已经落后了一点。但是,非常欢迎您为该项目做出贡献:)