2

在我的 REST WCF 服务中,我在 WCF 堆栈级别(IErrorHandler)上记录所有异常

这是我的代码:

public void PostPositions(List<Position> positions)
{
    if (!this.ValidateRequest()) return;
    foreach (var position in positions)
    {

我得到例外:

你调用的对象是空的。


在C:\CodeWorkspace\ClientServerCode\Web.Services\Rest\MobileService.cs: SyncInvokePostPositions(Object , Object[] , Object[] ) 中的 Web.Services.MobileService.PostPositions(List`1 个位置)中的第 1170 行。 ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(对象实例,对象 [] 输入,对象 [] 和输出)

我的代码中的第 1170 行是if (!this.ValidateRequest()) return;

这是什么意思?没有静态方法,我使用类的实例并且this肯定存在。如果内部发生异常,ValidateRequest()我希望堆栈跟踪能够显示这一点。

任何指针?

4

1 回答 1

1

我愿意打赌那positions是空的,这foreach(var position in positions)就是在调用GetEnumerator()位置时抛出异常的原因。

if(positions != null)
{
    foreach(var position in positions)
    {
        ...
    }
}

正如您可能猜到的那样,行号计算在这里很容易变得有点混乱,因为foreach循环只是这样的语法糖:

IEnumerator<Position> enumerator = positions.GetEnumerator();

try
{
    Position position;

    while(enumerator.MoveNext())
    {
        position = enumerator.Current;

        //The code from the body of your foreach loop goes here
    }
 }
 finally
 {
     //Clean up the enumerator
 }
于 2012-06-21T18:43:26.440 回答