有时我会遇到一个错误:
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()
以下是两个方法:
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
中抛出错误?
FindHeader
,然后(对于值> -1)应用索引操作可以防止它抛出任何异常。您不应编写依赖于特定异常被抛出的代码(特别是如果您随后捕获所有异常,而不仅仅是预期的异常)。 - Damien_The_Unbeliever