Tridion 2009 SP1: Брокер, как получить бинарный URL?

Я пытаюсь получить двоичный URL-адрес файла мультимедийного компонента, который публикуется как динамическое представление компонента.

Я вижу URL в таблице Binaries в базе данных Broker, но не могу получить двоичный 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);
    }
}                        

Использование бинарной мета-фабрики:

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

Я могу загрузить метаданные компонента, используя Component MetaFactory.

Есть идеи, почему я не могу загрузить двоичную мету? Я на правильном пути?

обкрадывать

4 ответа

Решение

Есть ли причина, по которой вы не используете двоичную ссылку, чтобы получить объект Link для конкретного варианта двоичного файла, который вы хотите? Помните, что любой DCP может отображать несколько вариантов вашего мультимедийного компонента. Затем из объекта Link вы можете получить URL для двоичного файла.

Ищите Binary Link в документации для более подробной информации.

Похоже, ваш первый пример импортирует (автоматически сгенерированные) методы из внутренней DLL (Tridion.ContentDelivery.Interop.dll). Пожалуйста, не используйте их и придерживайтесь их в пространстве имен Tridion.ContentDelivery (Tridion.ContentDelivery.dll).

Вы можете найти официальную документацию по API Content Delivery.NET в формате CHM на SDL Tridion World (нажмите на ссылку, войдите на сайт и снова нажмите на эту ссылку). Из этой документации вытекает этот пример:

//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();

Фабричный класс Tridion.ContentDelivery.Meta.BinaryMetaFactory от Tridion.ContentDelivery.dll, Я действительно также не могу найти GetBinaryMeta метод в этом классе, поэтому кажется, что в примере кода есть ошибка. Наиболее вероятный метод, который вы должны использовать, это GetMeta,

Попробуй это:-

 BinaryMeta binaryMeta = b.GetBinaryMeta(queryStringId);
 if(binaryMeta != null) {
       VideoBinaryUrl = binaryMeta.URLPath;
 }

Я сделал SQL Profiler для кода и заметил, что это потому, что я развернул свое тестовое приложение, оно не вызывало брокера. Запуск кода на фактическом сайте Tridion Опубликовал действительно попал в базу данных, но он передавал значение "[#deF#]" для столбца optionId.

Теперь я получил его работать со следующим кодом:

IComponentMeta cm = cmf.GetMeta(queryStringId);
if (cm != null)
{
    TcmId = queryStringId;
    Title = cm.TryGetValue("title");
    Summary = cm.TryGetValue("summary");
    Product = cm.TryGetValue("product");


    if (cm.SchemaId == StreamingContentSchemaId)
    {
        VideoId = cm.TryGetValue("video_url");
        IsVimeo = true;
    }
    else if (cm.SchemaId == WebcastSchemaId)
    {
        using (var b = new BinaryMetaFactory())
        {
            var binaryMeta = b.GetMeta(queryStringId, "tcm:0-" + cm.OwningPublicationId + "-1");
            if (binaryMeta != null)
            {
                VideoBinaryUrl = binaryMeta.UrlPath;
            }
            else
            {
                Logger.Log.ErrorFormat("Failed to load binary meta {0}", queryStringId);
            }
        }
    }
Другие вопросы по тегам