尝试调用方法时,C#执行会停止而不会出错

时间:2011-07-11 13:21:43

标签: c# execution

首先,我很难过。我有一个CMS的搜索模块,可以在一个站点上正常运行,但它不会像在另一个站点上那样运行。

我有这个代码我用Ajax调用调用它们,只是在加载搜索站点时:

private string GetSearchContent()
    {
        Query q = GetQuery();  

        //for each area, set it up, perform search and render result

        IArea products = new ProductArea(GetEcomExcludedGroupIDs(), GetEcomLanguage()).Search(q);

        IArea pages = new PageArea(GetAreaId())
            .Search(q);

        IArea news = new NewsArea(GetIncludedNewsCategoryIDs())
            .Search(q);            
        ....
    }

这里的重要部分是搜索功能。这是在类中实现的,但由于某种原因,代码将不会被执行。

我尝试拆分代码,所以我确信这就是错误所在。怪异的部分是它不会抛出任何异常,但只要我尝试调用搜索功能它就会停止执行。它甚至没有进入功能。

搜索功能如下所示:

public override IArea Search(Query q)
    {
        log.Debug("Product search");
        ....
    }

它覆盖的函数只是一个声明函数的接口上的抽象函数。

我已经尝试将函数复制到执行它的同一个类,没有运气,我尝试访问类上的其他函数,并且工作正常。

我的问题是。什么可能导致这种行为?我试过环顾四周但却找不到其他同样问题的人。如前所述,完全相同的代码在另一个站点上顺利运行。

我真的希望有人可以帮助我更接近解决问题,或至少了解问题。

1 个答案:

答案 0 :(得分:2)

问题是无法回答的。你声称Search方法永远不会运行,并且错误的行是这一行:

IArea news = new NewsArea(GetIncludedNewsCategoryIDs()).Search(q);

Search方法之外,有一些不同的事情可能是错误的:

  • NewsArea构造函数抛出异常
  • GetIncludedNewsCategoryIDs方法抛出异常
  • 上述任何一种都可以调用非托管代码并生成本机Win32异常,在某些情况下这将导致进程终止而不是返回托管代码。

你声明“没有try-catch” - 更多的理由不相信你的断言方法只是停止而没有抛出异常。请尝试以下操作以进行诊断:

try
{
    IArea news = new NewsArea(GetIncludedNewsCategoryIDs()).Search(q);
}
catch (Exception e)
{
    Logger.Log("Caught in the act: " + e.ToString());
    throw;
}

如果你已经运行了这个并且仍然看到执行停止而没有记录任何异常,那么我们将看看其他可能性。