我正在开发 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配置/数据库配置有任何问题吗?权限分配为*(读,写)。
对此问题的任何帮助表示赞赏。
感谢。
答案 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工具已经落后了一点。但是,非常欢迎您为该项目做出贡献:)