Citrix 动态虚拟通道错误:找不到支持 DVC 的传输

Posted

技术标签:

【中文标题】Citrix 动态虚拟通道错误:找不到支持 DVC 的传输【英文标题】:Citrix dynamic virtual channel error: Cannot find a transport to support DVC 【发布时间】:2015-04-28 04:30:15 【问题描述】:

我无法在 Citrix 服务器和本地 PC 之间创建动态虚拟通道。服务器端出现的错误是:

CSession::CreateDynamicChannel:找不到传输支持 DVC=

我有一个 C++ COM dll 在本地 PC 上注册为插件,它似乎已被 Citrix Receiver 的虚拟通道管理器正确加载(我从初始化到将侦听器附加到端点的跟踪记录表明一切正常)。

但是,当我们在 Citrix 服务器上启动可执行文件时,我们会收到上述错误。可执行文件是 C#/.Net 应用程序。该错误是响应我对 WTSVirtualChannelOpenEx 的调用而发生的。

我在 C# 中对该函数的函数原型如下:

[DllImport("wtsapi32.dll", SetLastError = true)]
private static extern IntPtr WTSVirtualChannelOpenEx(
    [In]
    [param: MarshalAs(UnmanagedType.I4)]
    int SessionId,
    [In]
    [param: MarshalAs(UnmanagedType.LPStr)]
    string VirtualName,
    [In]
    [param: MarshalAs(UnmanagedType.U4)]
    int flags);

我对函数的实际调用如下:

_vcHandle = WTSVirtualChannelOpenEx(
    (int)Session.WTS_CURRENT_SESSION,
    pluginName,
    (int)(DynamicChannel.WTS_CHANNEL_OPTION_DYNAMIC | DynamicChannel.WTS_CHANNEL_OPTION_DYNAMIC_PRI_HIGH)
    );

“pluginName”的值是从配置文件加载的 7 个字符的字符串。

关于动态虚拟通道的 Citrix 文档只是说在客户端和服务器端都遵循 Microsoft API,我已经这样做了。该文档指定了如何在客户端注册插件,但没有规定必须在服务器上执行任何额外操作。

据我了解,服务器上的虚拟通道管理器从客户端的虚拟通道管理器中获取插件名称列表。然后,服务器端虚拟通道管理器将名称存储在一个表中。此后,当任何程序通过动态虚拟通道向客户端插件请求连接时,服务器端虚拟通道管理器会在表中查找名称,然后将连接请求发送给客户端。

设置中是否有需要做的事情。例如,管理员是否需要将动态虚拟通道分配给特定的静态虚拟通道编号,或者虚拟通道管理器是否在发出请求时动态处理(因此名称为“动态”) ?

我无法在文档或网络搜索中找到任何关于我们遇到的错误的参考资料。

【问题讨论】:

【参考方案1】:

不,没有为动态 VC 分配 VC。它们通过在一个静态(底层)VC 上多路复用来工作。

您为“pluginName”使用什么名称?如果您查看 SDK 附带的 vdping 示例,您会在 DriverOpen 实现的客户端代码中看到一行如下:

OpenVirtualChannel.pVCName = CTXPING_VIRTUAL_CHANNEL_NAME;

此常量在相关的 vdping.h 头文件中定义:

#define CTXPING_VIRTUAL_CHANNEL_NAME  "CTXPING"

因此,如果我想在服务器上打开这个 VD,我需要使用“CTXPING”作为插件名称,您可以在 SDK 中 ctxping.c 中的相关服务器示例代码中看到它(注意示例是很老了,所以他们使用的是 Citrix WF API,使用 WTSVirtualChannelOpenEx 也可以):

hVC = WFVirtualChannelOpen( WF_CURRENT_SERVER,
                            WF_CURRENT_SESSION,
                            CTXPING_VIRTUAL_CHANNEL_NAME );

除此之外,您只需确保您已正确执行注册步骤并添加了必要的注册表项。请注意,这些文档是在 x64 之前创建的。因此,虽然文档状态:

HKLM\Software\Citrix\ICA Client\etc...

您需要确保使用 32 位注册表配置单元,因为 Windows 客户端是 32 位:

HKLM\Software\Wow6432Node\Citrix\ICA Client\etc...

【讨论】:

谢谢。我使用的名称很好,但您对注册表项的建议可能是指向问题的指针。我将尝试列出插件的注册表项,并将在此处发布有关结果的评论。干杯

以上是关于Citrix 动态虚拟通道错误:找不到支持 DVC 的传输的主要内容,如果未能解决你的问题,请参考以下文章

[转] Citrix XenDesktop桌面登录VM提示Citrix Web插件错误

Citrix Receiver登入的时候报找不到ICAWebWrapper插件

Citrix每周技术动态--20160625

未捕获的错误:对 JavaScript 使用动态导入时找不到模块

Flutter:错误:MissingPluginException(在通道 plugins.flutter.io/path_provider 上找不到方法 getTemporaryDirectory

Flutter:错误:MissingPluginException(在通道 plugins.flutter.io/package_info 上找不到方法 getAll 的实现)