Как получить уникальный идентификатор клиента в Citrix XenApp 6.0?(MFCom от 4.0 и 4.5 не работает) - PullRequest
0 голосов
/ 02 июня 2011

В настоящее время для Presentation Server 4.0 и 4.5 я получаю уникальный идентификатор клиента через MFCom в C # .NET.

MetaFrameFarm farm = new MetaFrameFarm();
farm.Initialize(MetaFrameObjectType.MetaFrameWinFarmObject);

foreach (MetaFrameSession session in farm.Sessions)
{
    clientId = session.ClientID;
.....

Я начал получать тестирование ошибок на 6.0. Неудачная строка, о которой идет речь, является первой строкой, в которой описан объект 'ферма' выше.

Глядя онлайн я нашел это ...

Начиная с XenApp 6.0, MFCOM как публично поддерживаемое программирование и скриптовый интерфейс больше не будет имеется в наличии. Все существующие на основе MFCOM код больше не работает на XenApp 6.0. нет сомневаюсь, что отсутствие МФКОМ будет быть чем-то, что требует дополнительного усилия по принятию XenApp 6.0.

Есть ли способ получить уникальный идентификатор клиента в 6.0?

Ответы [ 2 ]

1 голос
/ 09 ноября 2011

Это довольно старый, но я продолжал сталкиваться с этим, когда я хотел получить clientID.

Имейте в виду, что идентификаторы клиентов из 4.X не совпадают с 6.X.Это относится ко всем идентификаторам, приложению и серверу:

Runspace rs = RunspaceFactory.CreateRunspace();
rs.Open();

PowerShell ps = PowerShell.Create();
ps.Runspace = rs;

PSSnapInException ex;
rs.RunspaceConfiguration.AddPSSnapIn("Citrix.XenApp.Commands", out ex);

ps.AddCommand("GET-XASession").AddParameter("Full");

foreach (PSObject Session in ps.Invoke())
{
   try
   {
      ClientID = Convert.ToString(Session.Properties["ClientId"].Value);

      Console.WrileLine(ClientID);

   }

   catch (Exception e)
   {
      WriteError.WriteEntry("Client Failure " + e.Message + EventLogEntryType.FailureAudit);
   }
}
0 голосов
/ 23 августа 2011

Как вы правильно установили, MFCOM недоступен в XenApp 6. Таким образом, у вас есть два способа получить уникальный ClientID:

  1. Используйте подсистему WMI Citrix. В своем приложении подключитесь к пространству имен Root \ Citrix WMI и перечислите экземпляры класса MetaFrame_Session. Вы можете выполнить фильтрацию по имени сервера (так как перечисление вернет все сеансы на всех серверах фермы, а не только на том, на котором запущено приложение) и по идентификатору сеанса. Экземпляры класса Metaframe_session содержат несколько свойств, которые являются ссылками на экземпляры других классов; свойство Client ссылается на Metaframe_ICA_Client, а свойство SessionUser ссылается на Citrix_User. Metaframe_ICA_Client дает вам IP-адрес клиента, имя хоста и некоторые другие вещи, которые вы можете объединить в качестве идентификатора.
    Однако в настоящее время XenApp 6 имеет серьезную ошибку с подсистемой WMI Citrix и пытается перечислить и создать экземпляры классов, на которые я ссылаюсь выше (как обычный пользователь - администраторы в порядке) приводит к сбою не менее пятнадцати отдельных системных служб ... Так что, возможно, нет.
  2. Альтернативой (и техникой, которую я использовал) было использование Citrix WFAPI SDK . Это неуправляемый код и немного свирепый, но есть довольно хорошая статья об использовании WFAPI для получения сведений о клиенте здесь .
...