【发布时间】:2022-07-28 18:09:22
【问题描述】:
概述
我们公司即将向使用 Citrix XenApp(或已重命名的任何产品)的客户分发 C# .NET / WPF 应用程序。此应用程序在一台 Citrix 服务器上运行多次,每个用户一次,作为其 Citrix 会话的一部分。应用程序的每个实例都必须响应从 localhost:xxxx 获取的浏览器 JavaScript,xxxx 始终是相同的端口号。
Citrix 为此提供了一种称为虚拟环回的东西,并为此讨论了 Windows 的虚拟 IP。目前我们正在尝试虚拟环回。虚拟环回基本上允许每个会话使用不同的“本地主机”,形式为 127.0.0.1、127.0.0.2、127.0.0.3 等。 Citrix 在这里详细描述了这两种情况:https://docs.citrix.com/en-us/xenapp-and-xendesktop/7-15-ltsr/manage-deployment/virtual-ip-virtual-loopback.html。
基本上,它不适用于 .NET。相比之下,一位同事在 Citrix 方法中使用 Python 测试应用程序作为实验,效果很好。
这是 Citrix 中的一个由两部分组成的策略(一般设置它,并命名可以使用重定向的应用程序),并且两者都已正确设置。这也不是浏览器找不到正确地址的问题;这将使用 Citrix 策略进行设置,但是当我们的应用程序启动并且只有第一个实例可以(自然)绑定到套接字时发生故障。
历史和最新步骤
在我们的代码中,使用 localhost 作为文字会解析为 0:0:0:0,这不是 127.x.x.x 系列的一部分,因此会失败。这部分现在对我来说很有意义,基本上。但是,当我尝试在代码中使用 127.0.0.1 时,认为设置可能会透明地重定向,尽管它已被拼写出来,但这根本不起作用。
所以现在我正在尝试可能有帮助或没有帮助的变通办法,例如使用 IPAddress.Loopback 并确保 IP 地址是 IPv4(在几年前发现这对类似的 Java 问题产生了影响,见此 StackOverflow问/答:
Java get REAL loopback address programmatically)。
顺便说一句,本地端口不能仅以编程方式为每个实例更改,因为 REST 调用用于获取会话的特定应用程序实例,因此如果端口发生变化,JavaScript 必须提前知道正确的端口,违背了目的。
推测
我的同事推测问题在于我们创建的应用程序作为系统运行,但据我所知,这是使用 .NET Web 堆栈的副产品,因为测试应用程序实际上是在我的用户名下运行的.它显然也是不可能改变的,因为它是副产品。也许我在那里错过了什么?
有没有人看到这个问题,你找到的答案是什么?
【问题讨论】:
标签: c# windows localhost loopback citrix