7

ObjectDisposedException: 安全なハンドルが閉じられています。

これは私のコードです:

文字列を取得し、既知のキーをアタッチし、この文字列とキーの MD5 ハッシュを計算し、計算されたハッシュを返すことができるインターフェイスと実装クラスを作成しようとしています。

public interface ISignService
{
    string GetSignature(string str);
}

public class SignService : ISignService
{
    private readonly ISignSettings _signSettings;
    private readonly HashAlgorithm _hashAlgo;


    public SignService(ISignSettings signSettings)
    {
        _signSettings = signSettings;
        _hashAlgo = MD5.Create();
    }

    public string GetSignature(string str)
    {
        var strWithKey = str + _signSettings.EncryptionKey;

        var hashed = _hashAlgo.ComputeHash(Encoding.UTF8.GetBytes(strWithKey));

        return hashed.ToHexString();
    }
}

ありがとう

4

2 に答える 2

11

あなたのコードはスレッドセーフではありません。_hashAlgoスレッド間で共有できません。発生する可能性のある問題は、表示される例外だけではないことに注意してください。この問題は、ハッシュ値が正しくない可能性もあると思います。HashAlgorithm毎回新しいオブジェクトを作成するか、スレッド ローカルを調べてスレッドごとに 1 つのインスタンスを作成する必要があります。

于 2014-01-16T01:07:15.673 に答える
2

コードは正常に機能しているようです。問題は次のとおりです。

  1. オブジェクトは、構築と使用の間でシリアル化および逆シリアル化されていますか?もしそうなら、MDS.Create()内側に移動しますGetSignature()
  2. オブジェクトは破棄されていますか(SignServiceまたは_hashAlgo)?その場合は、廃棄したり、必要に応じて再作成したりしないでください。
于 2012-09-07T01:20:24.517 に答える