Perforce P4 .NET API возвращает неверный пароль Perforce (P4PASSWD)
Я пишу приложение VS C#, используя p4api.net для доступа к серверу P4. Приложение P4V получает доступ к депозитарному штрафу с заданным пользователем / паролем. Используя API p4api.net, код выполнял методы Connect() и Login() без исключения, используя строки server/user/password, переданные из формы:
rep.Connection.Connect(options);
rep.Connection.Login(password, options);
Ниже приведен актуальный код:
String conStr = mServerConnection.Text;
String user = mUserText.Text;
String password = mPaswordTxt.Text;
try
{
Server server = new Server(new ServerAddress(conStr));
rep = new Repository(server);
rep.Connection.UserName = user;
Options options = new Options();
Options["Password"] = password;
rep.Connection.Client = new Client();
rep.Connection.Connect(options);
rep.Connection.Login(password, options);
}
catch (Exception ex)
{
rep = null;
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
Однако во время другого вызова для доступа к корневому каталогу P4 "// депо" вызов API _repository.GetDepotDirs() вернул бы исключение "Perforce Password (P4PASSWD) недопустимое или неустановленное". Пожалуйста, смотрите код ниже:
public bool Expand()
{
if (String.IsNullOrEmpty(depotPath))
return false;
// if we have the depot path, get a list of the subdirectories from the depot
if (!String.IsNullOrEmpty(depotPath))
{
IList<string> subdirs = _repository.GetDepotDirs(null, String.Format("{0}/*", depotPath));
Я где-то читал, что мне нужно установить переменную окружения P4TICKETS, поэтому я сделал это в командной строке DOS:
p4 set P4TICKETS=C:\Documents and Settings\my_user_name
но это не решило проблему. Буду признателен за вашу помощь. Благодарю.
1 ответ
На уровне безопасности 3 передача пароля непосредственно в Connect не работает. Поэтому я ловлю последующее исключение и затем вызываю Логин. В этот момент вы можете сохранить Credential.Ticket, возвращаемый при входе в систему, для будущих вызовов Connect, в поле " Билет" в параметрах.
Я не уверен, почему последующие вызовы команд не выполняются, если срок действия билета не истек или вы действительно отключились от сервера. Вы всегда можете позвонить Connect снова перед последующими командами.