抛出错误而不是返回null。为什么?

时间:2013-05-22 10:16:34

标签: c#

我有时会遇到错误

There is not a header with name UserName and namespace http://www.website.com/ in the message.

堆栈跟踪

  

System.ServiceModel.Channels.MessageHeaders.GetHeader [T](String name,   String ns,String [] actors)   Common.Utilities.WCF.WcfCallContext.TryGetHeader(String key)   Common.Utilities.WCF.WcfCallContext.get_UserName()

以下是2种方法:

    private static string TryGetHeader( string key )
    {
        try
        {
            return GetHeader( key );
        }
        catch
        {
            return null;
        }
    }

    private static string GetHeader( string key )
    {
        var headers = OperationContext.Current.IncomingMessageHeaders;
        var value = headers.GetHeader<string>( key, "http://www.website.com/", "Project" );
        return value;
    }
}

所以TryGetHeader(使用try和catch)调用GetHeader。 显然它打破了:

var value = headers.GetHeader<string>( key, "http://www.website.com/", "Project" );

为什么TryGetHeader没有将其视为错误并且未返回null? 好像它在GetHeader中断了并停止而不是在TryGetHeader中错误地重新抛出?

1 个答案:

答案 0 :(得分:6)

如果您致电TryGetHeader,则会捕获该异常。我强烈怀疑您正在看到“第一次机会异常”,或者在IDE /调试器中看到异常。这是一个幻像:异常并不存在(或者更确切地说,它会在正常执行中被捕获)。尝试关闭IDE中的异常处理选项。