3

時々エラーが発生します:

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

スタックトレース

System.ServiceModel.Channels.MessageHeaders.GetHeader[T](文字列名、文字列 ns、文字列[] アクター) Common.Utilities.WCF.WcfCallContext.TryGetHeader(文字列キー) 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

4

1 に答える 1

6

を呼び出すTryGetHeaderと、その例外がキャッチされます。「最初のチャンスの例外」が表示されているか、IDE / デバッガーで例外が表示されている可能性が高いと思われます。これはファントムです: 例外は実際には存在しません(というか、通常の実行でキャッチされます)。IDE で例外処理オプションを下げてみてください。

于 2013-05-22T10:24:26.760 に答える