プロジェクトで Windows 資格情報マネージャーを使用すると問題が発生します。appsettings の connectionString のユーザー名とパスワードを置き換えるために使用しています。開発環境と QA 環境ではすべて正常に動作しますが、本番環境 (完全なアクセス権はありません) では動作しません。問題は、ターゲットから資格情報をロードするときに空の文字列が返されることです。
これが私がそれをロードしている場所です:
public static CredentialModel GetCredential(string target)
{
CredentialModel credentialDto = new CredentialModel();
using var credential = new Credential
{
Target = target
};
credential.Load();
credentialDto.UserName = credential.Username;
credentialDto.Password = credential.Password;
return credentialDto;
}
これが CredentialModel です
public class CredentialModel
{
public string UserName { get; set; }
public string Password { get; set; }
}
そして、connectionString の資格情報を置き換えます。
StringBuilder connectionString = new(host.Configuration.GetConnectionString("RemessasConnectionString"));
var credential = CredentialService.GetCredential("Pegasus");
connectionString.Replace("$userId", credential.UserName);
connectionString.Replace("$password", credential.Password);
ConnectionString = connectionString.ToString();
デバッグのために、connectionString に何が追加されているかを確認するためにログに行を追加しました。本番環境では空の文字列に置き換えられていますが、開発環境では実際の値です。
この理由について 1 つの考えがあります。アプリケーションは Windows ユーザーで実行されており、そのユーザーは運用サーバーの Windows 資格情報マネージャーにアクセスできません (ただし、これは空の文字列だけでなくエラーを返すと思います)。
誰かが私を正しい方向に向けることができたり、試してみるべき提案があれば、私はすべて耳にします.