我有时会遇到错误:
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
中错误地重新抛出?
答案 0 :(得分:6)
如果您致电TryGetHeader
,则会捕获该异常。我强烈怀疑您正在看到“第一次机会异常”,或者在IDE /调试器中看到异常。这是一个幻像:异常并不存在(或者更确切地说,它会在正常执行中被捕获)。尝试关闭IDE中的异常处理选项。