#client #unique #citrix #xenapp
#клиент #уникальный #citrix #xenapp
Вопрос:
В настоящее время для сервера презентаций 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. Нет сомнений, что отсутствие MFCOM потребует дополнительных усилий для внедрения XenApp 6.0.
Есть ли способ получить уникальный идентификатор клиента в 6.0?
Ответ №1:
Это довольно старое, но я продолжал сталкиваться с этим, когда хотел получить идентификатор клиента.
Имейте в виду, что идентификаторы клиентов из 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);
}
}
Ответ №2:
Как вы правильно установили, MFCOM недоступен в XenApp 6. Таким образом, у вас остается два способа получения уникального идентификатора клиента:
- Используйте подсистему WMI Citrix.Из вашего приложения подключитесь к корневому пространству имен Citrix WMI и перечислите экземпляры класса MetaFrame_Session. Вы можете фильтровать по имени сервера (поскольку перечисление вернет все сеансы на всех серверах фермы, а не только на том, на котором вы запускаете приложение) и идентификатору сеанса. Экземпляры класса Metaframe_session содержат пару свойств, которые являются ссылками на экземпляры других классов; свойство Client ссылается на Metaframe_ICA_Client, а свойство SessionUser ссылается на Citrix_User. Metaframe_ICA_Client предоставляет вам IP-адрес клиента, имя хоста и несколько других параметров, которые вы могли бы объединить в качестве идентификатора.
Однако в настоящее время в XenApp 6 обнаружена серьезная ошибка с подсистемой Citrix WMI, и попытка перечислить и создать экземпляры классов, на которые я ссылался выше (как обычный пользователь — администраторы в порядке), приводит к сбою не менее чем пятнадцати отдельных системных служб… Так что, возможно, нет. - Альтернативой (и методом, который я использовал) было использование Citrix WFAPI SDK. Это неуправляемый код и немного свинячий, но здесь есть довольно хорошая статья об использовании WFAPI для получения сведений о клиенте.