Tridion 2009 SP1:经纪人如何获取二进制URL?

Rob*_*ett 1 tridion tridion2009 tridion-content-delivery

我正在尝试检索多媒体组件的文件的二进制URL,该文件作为动态组件演示文稿发布.

我可以在Broker数据库的Binaries表中看到Url,但我似乎无法使用以下任何一段代码获取二进制url:

使用SQLBinaryMetaHome:

using (var sqlBinMetaHome = new Com.Tridion.Broker.Binaries.Meta.SQLBinaryMetaHome())
{
    int componentItemId = int.Parse(queryStringId.Split('-')[1]);
    var binaryMeta = sqlBinMetaHome.FindByPrimaryKey(new TCDURI(publicationId, 16, componentItemId));

    if (binaryMeta != null)
    {
        VideoBinaryUrl = binaryMeta.GetURLPath();
    }
    else
    {
        Logger.Log.ErrorFormat("Failed ot load via SQL Binary Meta {0}", queryStringId);
    }
}                        
Run Code Online (Sandbox Code Playgroud)

使用二元元工厂:

using (var b = new BinaryMetaFactory())
{
    var binaryMeta = b.GetMeta(queryStringId);
    if (binaryMeta != null)
    {
        VideoBinaryUrl = binaryMeta.UrlPath;
    }
    else
    {
        Logger.Log.ErrorFormat("Failed to load binary meta {0}", queryStringId);
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以使用ComponentMetaFactory加载Component Meta数据.

关于为什么我无法加载Binary Meta的任何想法?我是在正确的轨道上吗?

Fra*_*len 5

看起来你的第一个例子是从内部DLL(Tridion.ContentDelivery.Interop.dll)导入(自动生成的)方法.请不要使用它们并坚持使用Tridion.ContentDelivery命名空间(Tridion.ContentDelivery.dll)中的那些.

您可以在SDL Tridion World上找到CHM格式的Content Delivery .NET API的官方文档(单击链接,登录该站点并再次单击该链接).从这个文档来看这个例子:

//create a new BinaryMetaFactory instance:
BinaryMetaFactory binaryMetaFactory = new BinaryMetaFactory();
//find the metadata for the specified binary
BinaryMeta binaryMeta = binaryMetaFactory.GetBinaryMeta("tcm:1-123");
//print the path to the output stream:
if(binaryMeta!=null) {
    Response.Write("Path of the binary: " + binaryMeta.UrlPath);
}
//Dispose the BinaryMetaFactory
binaryMetaFactory.Dispose();
Run Code Online (Sandbox Code Playgroud)

工厂类Tridion.ContentDelivery.Meta.BinaryMetaFactory来自Tridion.ContentDelivery.dll.我确实也找不到GetBinaryMeta该类中的方法,所以似乎代码示例中存在错误.您应该使用的最可能的方法是GetMeta.