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 снова перед последующими командами.

Другие вопросы по тегам