小编Kev*_*don的帖子

cd_link.PageLink GetLinkAsString(...)导致页面每隔一个请求失败

我目前正在从Tridion R5.3迁移到Tridion 2011.我在通过演示服务器提供某些页面时遇到问题.作为参考我的所有网页都是经典的ASP,我在IIS7.5上运行它们.

我有一个页面位于http://www.example.com/widget/index.asp.当我第一次访问页面时,我得到一个The page cannot be displayed because an internal server error has occurred.,如果我然后刷新页面它加载正常,如果我第三次刷新页面它出现错误.该页面每隔一个请求工作.

我在我的网站上启用了失败的请求跟踪,我收到了错误消息

ASP_LOG_ERROR
LineNumber: 87
ErrorCode: 800706be 
Description:
Run Code Online (Sandbox Code Playgroud)

注意没有描述.

被调用的代码是

85: Dim objTranslationPageLink
86: Set objTranslationPageLink = Server.createObject("cd_link.PageLink")
87: strTranslatedPageLink = objTranslationPageLink.GetLinkAsString("tcm:0-12-1", "tcm:12-123456-64", "", "", "TranslationFound", False)
88: Set objTranslationPageLink = Nothing
Run Code Online (Sandbox Code Playgroud)

cd_link.PageLink在调用GetLinkAsString(...)函数时,看起来创建对象没有问题.

cd_link.PageLink在很多其他页面中使用该对象没有任何问题,但似乎使用这段特定代码的页面遇到了问题.

我认为这可能与缓存页面有关,但是我关闭了ASP页面的缓存(IIS7> ASP>服务>缓存属性)并且仍然存在问题.

有任何想法吗?

EDIT1

该代码在Windows Server 2003 IIS6上运行良好.我试图让它在Windows Server 2008 IIS7上运行.

EDIT2

看来,网页创建大量的cd_link.ComponentLinkcd_link.PageLink对象.我有一个测试页面,我在其中创建了10个ComponentLink对象,我得到了错误(每隔一页),但如果我将其减少到5个ComponentLink对象,它每次都有效.

EDIT3

我的cd_core.xxxx.xx.xx.log有以下错误

2012-11-02 11:55:34,027错误XMLConfigurationReader - 使用模式'schemas/cd_link_conf.xsd'验证文件'cd_link_conf.xml'时出错.cvc-complex-type.3.2.2:属性'DefaultRootLocation'不允许出现在元素'Publications'中. …

tridion tridion-content-delivery tridion-2011

7
推荐指数
1
解决办法
411
查看次数

使用通配符搜索Content Manager时出错

我注意到,如果我搜索某些短语,Tridion Content Manager会给我以下错误

Unable to get the list of search results.
Unable to process the Search Request. Invalid search query: (*out*) AND RepositoryId:tcm\:0\-4\-1 AND OrganizationalItemAncestorIds:tcm\:*\-135625\-2. maxClauseCount is set to 10240
org.apache.lucene.search.BooleanQuery$TooManyClauses: maxClauseCount is set to 10240
at org.apache.lucene.search.BooleanQuery.add(BooleanQuery.java:136)
at org.apache.lucene.search.BooleanQuery.add(BooleanQuery.java:127)
at org.apache.lucene.search.ScoringRewrite$1.addClause
[...and so on]
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我正在搜索这个短语*out*.当我搜索短语*a*和各种其他较小的通配符查询时,它也会失败.如果我将搜索限制为只是项目标题,out*工作正常并且*out*工作正常.我是否搜索"所有出版物"或特定文件夹并不重要.如果我将搜索结果限制在最小值(50),则无关紧要.

也许这与返回的结果数量有关?

完全相同的搜索在Tridion 5.3上运行正常,我认为它不使用lucene?

有想法该怎么解决这个吗?

lucene tridion tridion-2011

7
推荐指数
1
解决办法
284
查看次数

VB.NET和sizeof

我正在将一些代码从C#转换为VB.NET.我在C#中有以下行

var bytes = new byte[password.Length * sizeof(char)];
Run Code Online (Sandbox Code Playgroud)

MSDN上看来,VB.NET似乎没有sizeof运营商.我知道有一个Marshal.SizeOf但是进一步的MSDN文档声明返回的值可能与之不同sizeof.

有人可以帮忙吗?在VB.NET中是否有相同的声明?

附加信息

我的目标是将密码转换为字节数组,然后我可以散列,然后存储在数据库中或与之前存储的散列进行比较.但我不一定想得到与我的具体情况有关的答案.

Dim bytes(password.Length * xxx) As Byte
System.Buffer.BlockCopy(password.ToCharArray(), 0, bytes, 0, bytes.Length)
Dim sha512 = System.Security.Cryptography.SHA512.Create()
Dim hash = sha512.ComputeHash(bytes)

' compare hash or stroe in database
Run Code Online (Sandbox Code Playgroud)

.net c# vb.net sizeof

7
推荐指数
1
解决办法
6857
查看次数

IDbCommand缺少ExecuteReaderAsync

我正在使用.NET Core 2.0.我有以下调用函数IDbCommand.ExecuteReader

public async Task<IEnumerable<Widget>> ReadAllAsync(
    System.Data.IDbConnection databaseConnection,
    System.Data.IDbTransaction databaseTransaction)
{
    var commandText = "SELECT WidgetId, Name FROM Widget";

    // _databaseCommandFactory.Create returns an IDbCommand
    var command = this._databaseCommandFactory.Create(databaseConnection, databaseTransaction, commandText);

    using (var dataReader = command.ExecuteReader())
    {
        // iterate through the data reader converting a collection of Widgets (`IEnumerable<Widget>`)
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到警告

这种异步方法缺少"等待"运算符并将同步运行.考虑使用'await'运算符等待非阻塞API调用,或'await Task.Run(...)'在后台线程上执行CPU绑定工作.

我正考虑将command.ExecuteReader()声明转换await Task.Run(() => command.ExecuteReader())为警告中的建议.但我不确定这是正确的方法,我相信Task.Run(...)是基于CPU的工作.这主要是IO工作.

所以我的问题是

  1. Task.Run(...)正确的方法吗?
  2. 如果没有,还有其他解决方案吗?
  3. 或者我应该暂时忽略警告并等待直到ExecuteReaderAsync添加到IDbCommand界面?(有计划吗?)

c# asynchronous async-await .net-core-2.0

7
推荐指数
1
解决办法
690
查看次数

在文本字段中键入时忽略字符

在输入富文本字段时,我遇到了忽略字符的问题.这似乎只是IE8和IE9中的一个问题.例如,我输入了"快速棕色狐狸跳过懒狗"四次,这是富文本字段中显示的内容.

the quick brown fx jump over the lazy dog
the quckbrown f umps over the azy dog
the quick rown fox jumps over the azy dog
the quck brown fox jumps ove the lazydog
Run Code Online (Sandbox Code Playgroud)

我首先假设可能有一些javascript在附加到按键事件的背景中运行(可能是拼写检查),但是没有及时完成下一次按键,但没有运气跟踪它.我试过多台电脑,但都有这个问题.

tridion tridion-2011

6
推荐指数
1
解决办法
97
查看次数

使动态链接在经典ASP页面上运行

我目前正在进行Tridion 2011的全新安装.我们之前使用的是5.3并且正在保留数据库.到目前为止,我已经安装了数据库,内容管理器,两个内容交付服务器,现在我正在设置演示服务器.我们所有的网页都是使用经典的asp构建的.我被告知如果我希望我的asp页面使用动态链接,我应该手动安装API(链接,代理和WAI)(参见/sf/answers/869976621/)

我已经阅读了文档,并解释了如何将API安装为.NET Web服务.我不认为这是我想要的,因为我的网页都是经典的asp.我假设我需要对Content Delivery\roles\api\windows目录中的exe文件做一些事情,但是当我运行它们时它们什么都不做.

在我的asp页面上运行以下代码时

Server.CreateObject("cd_link.ComponentLink")
Run Code Online (Sandbox Code Playgroud)

我收到了错误

服务器对象错误'ASP 0177:800401f3'

Server.CreateObject失败

/about/index.asp,第196行

800401f3

...但是这显然会发生,因为我没有安装链接器

附加信息

服务器是64位Windows Server 2008.运行IIS 7.5但我的Tridion 2011应用程序池以32位模式运行.

创建其他第三方对象工作正常.就像Chilkat Crypt库一样.

tridion tridion-2011

5
推荐指数
1
解决办法
451
查看次数

我如何 UseMiddleware&lt;Type&gt;(...) 并传入选项?

我试图了解 ASP.NET Core 管道的工作原理。我想使用StaticFileMiddleware并传入一些选项。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    var staticFileOptions = new StaticFileOptions();
    app.UseMiddleware<Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware>(staticFileOptions);
}
Run Code Online (Sandbox Code Playgroud)

当我运行我的应用程序时,出现以下错误

System.InvalidOperationException: A suitable constructor for type 'Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware' could not be located. Ensure the type is concrete and services are registered for all parameters of a public constructor.
    at Microsoft.Extensions.Internal.ActivatorUtilities.CreateInstance(IServiceProvider provider, Type instanceType, Object[] parameters)
    at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.<>c__DisplayClass3_0.<UseMiddleware>b__0(RequestDelegate next)
    at Microsoft.AspNetCore.Builder.Internal.ApplicationBuilder.Build()
    at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用

app.UseStaticFiles(staticFileOptions);
Run Code Online (Sandbox Code Playgroud)

但是,由于这是一个学习练习,我想换个说法。

asp.net-core

5
推荐指数
2
解决办法
5052
查看次数

Dotnet 命令在以下项目上失败,退出代码为非零

我已经在 VSTS 上建立了一个构建定义。它在我的本地机器上构建良好。但是当我开始构建过程时出现以下错误

[错误]Dotnet 命令失败,以下项目的退出代码为非零:D:\a\1\s\My.Project\My.Project.csproj

build azure-devops

5
推荐指数
1
解决办法
2万
查看次数

TaxonomyDAO设置为文件系统,不受支持

我正在运行Tridion 2011 SP1,并在我的cd_core.xxxx.xx.xx.log文件中收到以下警告.

2012-10-17 12:37:50,298 WARN  FSTaxonomyDAO - TaxonomyDAO is set to File System, which is not supported. Check your bindings settings and/or license file.
Run Code Online (Sandbox Code Playgroud)

我从cd_deployer_conf.xml中删除了以下元素

<Module Type="TaxonomyDeploy" Class="com.tridion.deployer.modules.TaxonomyDeploy"/>
Run Code Online (Sandbox Code Playgroud)

但我仍然收到警告.

我认为这个问题导致我的许多多媒体组件在发布时失败.如果修复这些警告的原因没有帮助,那么我至少会缩小它.

编辑

我忘了提到我使用文件系统作为内容数据存储

tridion

4
推荐指数
1
解决办法
230
查看次数

删除链接到许多项目的组件

我有一个链接到数千个项目的组件(在这种情况下,所有其他项目都是组件).是否有一种简单/快速的方法来删除组件并删除所有链接?

我目前正在使用Tridion 5.3并通过TOM API以编程方式执行此操作.对于与10000个其他组件链接的一个组件,这需要大约7个小时.我还有更多要去的地方!

我正在从R5.3迁移到2011年,因此可以使用任一项.

我使用的代码如下......

static void Main(string[] args)
{
    var componentIDToRemove = "tcm:4-123456";

    var linkedComponentIDs = System.IO.File.ReadAllLines("C:\\...\\whereused.txt"); // ids of the components linked to tcm:4-123456

    TDS.TDSE tdse = new TDS.TDSE();

    foreach (var linkedComponentID in linkedComponentIDs)
    {
        TDS.Component component = null;
        TDS.ItemFieldValues itemFieldValues = null;

        try
        {
            component = (TDS.Component)tdse.GetObject(linkedComponentID, TDSDefines.EnumOpenMode.OpenModeView);

            itemFieldValues = component.MetadataFields["myfield"].value;

            var itemFieldValuesCount = itemFieldValues.Count;
            for (var i = itemFieldValuesCount; i > 0; i--)
            {
                if (itemFieldValues[i].ID == componentIDToRemove)
                {
                    component.CheckOut();
                    itemFieldValues.Remove(i);
                    component.Save();
                    component.CheckIn();
                }
            } …
Run Code Online (Sandbox Code Playgroud)

tridion

4
推荐指数
1
解决办法
202
查看次数