Tridion2009SP1:代理如何获取二进制Url?

Tridion2009SP1:代理如何获取二进制Url?,tridion,tridion2009,tridion-content-delivery,Tridion,Tridion2009,Tridion Content Delivery,我试图检索作为动态组件表示发布的多媒体组件文件的二进制Url 我可以在代理数据库的Binaries表中看到Url,但似乎无法使用以下代码位获取二进制Url: 使用SQLBinaryMetaHome: 使用(var sqlBinMetaHome=new Com.Tridion.Broker.Binaries.Meta.SQLBinaryMetaHome()) { int componentItemId=int.Parse(queryStringId.Split('-')[1]); var bina

我试图检索作为动态组件表示发布的多媒体组件文件的二进制Url

我可以在代理数据库的Binaries表中看到Url,但似乎无法使用以下代码位获取二进制Url:

使用SQLBinaryMetaHome:

使用(var sqlBinMetaHome=new Com.Tridion.Broker.Binaries.Meta.SQLBinaryMetaHome())
{
int componentItemId=int.Parse(queryStringId.Split('-')[1]);
var binaryMeta=sqlBinMetaHome.FindByPrimaryKey(新的TCDURI(publicationId,16,componentItemId));
if(binaryMeta!=null)
{
VideoBinaryUrl=binaryMeta.GetURLPath();
}
其他的
{
Logger.Log.ErrorFormat(“通过SQL二进制元{0}加载ot失败”,queryStringId);
}
}                        
使用二进制元工厂:

使用(var b=new BinaryMetaFactory())
{
var binaryMeta=b.GetMeta(queryStringId);
if(binaryMeta!=null)
{
VideoBinaryUrl=binaryMeta.UrlPath;
}
其他的
{
Logger.Log.ErrorFormat(“未能加载二进制元{0}”,queryStringId);
}
}
我可以使用ComponentMetaFactory加载组件元数据

你知道为什么我不能加载二进制元吗?我走对了吗

Rob

试试这个:-

 BinaryMeta binaryMeta = b.GetBinaryMeta(queryStringId);
 if(binaryMeta != null) {
       VideoBinaryUrl = binaryMeta.URLPath;
 }
试试这个:-

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

看起来您的第一个示例是从内部DLL(
Tridion.ContentDelivery.Interop.DLL
)导入(自动生成)方法。请不要使用这些名称,请坚持使用Tridion.ContentDelivery命名空间(
Tridion.ContentDelivery.dll
)中的名称

您可以在SDL Tridion World上找到CHM格式的官方文件(单击链接,登录网站,然后再次单击链接)。该文档提供了以下示例:

//创建新的BinaryMetaFactory实例:
BinaryMetaFactory BinaryMetaFactory=新的BinaryMetaFactory();
//查找指定二进制文件的元数据
BinaryMeta BinaryMeta=binaryMetaFactory.GetBinaryMeta(“tcm:1-123”);
//打印输出流的路径:
if(binaryMeta!=null){
Write(“二进制文件的路径:“+binaryMeta.UrlPath”);
}
//处理二进制元工厂
Dispose();

工厂类是
Tridion.ContentDelivery.Meta.BinaryMetaFactory
from
Tridion.ContentDelivery.dll
。我确实在该类中找不到
GetBinaryMeta
方法,因此代码示例中似乎有错误。您应该使用的最有可能的方法是
GetMeta

。看起来您的第一个示例是从内部DLL(
Tridion.ContentDelivery.Interop.DLL
)导入(自动生成)方法。请不要使用这些名称,请坚持使用Tridion.ContentDelivery命名空间(
Tridion.ContentDelivery.dll
)中的名称

您可以在SDL Tridion World上找到CHM格式的官方文件(单击链接,登录网站,然后再次单击链接)。该文档提供了以下示例:

//创建新的BinaryMetaFactory实例:
BinaryMetaFactory BinaryMetaFactory=新的BinaryMetaFactory();
//查找指定二进制文件的元数据
BinaryMeta BinaryMeta=binaryMetaFactory.GetBinaryMeta(“tcm:1-123”);
//打印输出流的路径:
if(binaryMeta!=null){
Write(“二进制文件的路径:“+binaryMeta.UrlPath”);
}
//处理二进制元工厂
Dispose();

工厂类是
Tridion.ContentDelivery.Meta.BinaryMetaFactory
from
Tridion.ContentDelivery.dll
。我确实在该类中找不到
GetBinaryMeta
方法,因此代码示例中似乎有错误。您应该使用的最有可能的方法是
GetMeta

我对代码执行了SQL探查器,并注意到这是因为我部署了测试应用程序,它没有调用代理。在实际Tridion发布的站点中运行代码确实命中了数据库,但它正在为variantId列传递值“[#def#]”

现在,我已使用以下代码使其工作:

IComponentMeta cm=cmf.GetMeta(queryStringId);
如果(cm!=null)
{
TcmId=queryStringId;
Title=cm.TryGetValue(“Title”);
汇总=厘米TryGetValue(“汇总”);
产品=厘米TryGetValue(“产品”);
if(cm.SchemaId==StreamingContentSchemaId)
{
VideoId=cm.TryGetValue(“视频url”);
IsVimeo=true;
}
else if(cm.SchemaId==网络广播SchemaId)
{
使用(var b=new BinaryMetaFactory())
{
var binaryMeta=b.GetMeta(queryStringId,“tcm:0-”+cm.OwningPublicationId+“-1”);
if(binaryMeta!=null)
{
VideoBinaryUrl=binaryMeta.UrlPath;
}
其他的
{
Logger.Log.ErrorFormat(“未能加载二进制元{0}”,queryStringId);
}
}
}

我对代码做了SQL探查器,并注意到这是因为我部署了测试应用程序,它没有调用代理。在Tridion发布的实际站点中运行代码确实命中了数据库,但它传递了variantId列的值“[#def#]”

现在,我已使用以下代码使其工作:

IComponentMeta cm=cmf.GetMeta(queryStringId);
如果(cm!=null)
{
TcmId=queryStringId;
Title=cm.TryGetValue(“Title”);
汇总=厘米TryGetValue(“汇总”);
产品=厘米TryGetValue(“产品”);
if(cm.SchemaId==StreamingContentSchemaId)
{
VideoId=cm.TryGetValue(“视频url”);
IsVimeo=true;
}
else if(cm.SchemaId==网络广播SchemaId)
{
使用(var b=new BinaryMetaFactory())
{
var binaryMeta=b.GetMeta(queryStringId,“tcm:0-”+cm.OwningPublicationId+“-1”);
if(binaryMeta!=null)
{
VideoBinaryUrl=binaryMeta.UrlPath;
}
其他的