3

我有时会收到一个错误

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[] actor) 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(with try and catch) 正在调用 GetHeader。显然它打破了:

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

那么为什么它TryGetHeader不会将其视为错误并且不返回 a null?就好像它GetHeader闯入并停止,而不是在TryGetHeader?

4

1 回答 1

6

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

于 2013-05-22T10:24:26.760 回答