Android Emulator 环回 IIS Express 不起作用,但可以与 Cassini 一起使用

Posted

技术标签:

【中文标题】Android Emulator 环回 IIS Express 不起作用,但可以与 Cassini 一起使用【英文标题】:Android Emulator loopback to IIS Express does not work, but does work with Cassini 【发布时间】:2011-09-05 18:28:30 【问题描述】:

我正在尝试将数据从在本地计算机上的 android 模拟器中运行的 Android 应用程序发布到在 IIS Express 下运行的 Web 应用程序,该应用程序也在我的本地计算机上运行。不幸的是,当我从模拟器发布到 10.0.2.2 时,我收到了 Host Not Found 错误消息。

如果我将 Web 应用程序配置为在 ASP.NET Dev Server (Cassini) 而不是 IIS Express 下运行,则 Android 应用程序能够毫无问题地发布。对于 IIS Express,我缺少什么配置会阻止它使用来自 Android 模拟器的环回?

【问题讨论】:

【参考方案1】:

默认情况下,IIS Express 只接受来自 localhost 的连接。要启用来自远程设备的连接(模拟器也算在内),请使用来自here 的说明。

简而言之:

netsh http add urlacl url=http://[machinename]:[port]/ user=everyone
netsh http delete urlacl url=http://[machinename]:[port]/

[machinename][port] 替换为您的计算机名称(或非本地IP)和运行IIS Express 的端口。

另外,请参阅此question 和此one。

【讨论】:

Android 模拟器不是“远程设备”之一,所以你的答案是错误的方向。【参考方案2】:

授予自己绑定到 localhost 以外的网络适配器的权限,并将 IIS express 配置为绑定到所有适配器。

IIS Express 随后将接受来自 Android 模拟器的通过 10.0.2.2 的连接。如果您向防火墙添加规则,您还可以将 IIS Express 暴露给您的网络,这会降低安全性,但对于测试物理设备很有用。

步骤详情:(假设端口号为 5555 - 请改用您的实际端口)

    以管理员身份在命令提示符下运行:

    netsh http add urlacl url=http://*:5555/ user="NT AUTHORITY\INTERACTIVE"

    %USERPROFILE%\Documents\IISExpress\config\applicationhost.config 中,将您网站的 localhost 绑定替换为 bindingInformation="*:5555:*"。结果应如下所示:

    <site name="..." id="...">
        <!-- application settings omitted for brevity -->
        <bindings>
            <binding protocol="http" bindingInformation="*:5555:*" />
        </bindings>
    </site>

【讨论】:

在 Visual Studio 2015 和可能更新的版本中,applicationhost.config 文件不再位于 %USERPROFILE% 目录中,而是位于 %PROJECTDIR%\.VS\config\ 目录中。 它可以工作,但我每次都必须完成整个过程(每次重新启动后)。有可能以某种方式避免这种情况吗? @Orochi 配置更改应该是永久性的。重启后我没有遇到需要重新进行更改的情况。 我在 VS 中得到一个错误:无效的 URI:无法解析主机名。因此,我无法启动 WS。另外,每次我必须更改端口号。任何想法,如何解决它? 您的步骤不会“将 IIS Express 暴露给您的网络”,因为您甚至没有更改 防火墙 规则。我还写了一篇博文来展示如何使用 Jexus Manager blog.lextudio.com/… 直观地完成所有操作,而不是记住所有命令。【参考方案3】:

将以下行添加到 IIs 配置文件(例如 c:\Users[YourName]\Documents\IISExpress\config\applicationhost.config )如果需要更改端口 8085..

<binding protocol="http" bindingInformation="*:8085:127.0.0.1" />

所以你的配置文件最终会是这样的

<bindings>
<binding protocol="http" bindingInformation="*:4396:localhost" />     // the existing one
<binding protocol="http" bindingInformation="*:8085:127.0.0.1" />     // new line
</bindings>

现在您可以通过调用端口 8085 从远程调用您的 Web 服务

ex from android emu.
new HttpPost("http://10.0.2.2:8085");

【讨论】:

这对我来说是最好的解决方案。尽管如此,我不得不提供我的实际 IP 地址(来自您的示例:10.0.2.2)而不是本地循环 我替换了旧的(又名删除了 *port:localhost)并且工作正常!谢谢 我发现这篇文章有助于解决我的本地主机访问问题:damirscorner.com/blog/posts/… 对于Genymotion模拟器,需要添加&lt;binding protocol="http" bindingInformation="*:8085:192.168.56.1" /&gt;并在相同的IP地址和端口号上运行Web服务。然后只有我的模拟器连接到我的 iis express(端口号可以替换为所需的)。【参考方案4】:

这是我的解决方案: 我正在使用 Visual Studio Express 2013 for Web,并且我的 RESTful Web 服务在 IIS express 上运行。 当我尝试在同一台机器上使用 Android 模拟器访问我的 Web 服务时,它给了我这个无效的主机名错误。正如上面的答案所建议的,我确实向我的 applicationhost.config 文件添加了新的绑定,但它仍然没有工作。最后,我能够通过“以管理员身份”运行 Visual Studio 来解决这个问题。

【讨论】:

关于为什么你的步骤碰巧对你有用,细节可以在blog.lextudio.com/…找到虽然你上面的解释当然几乎没有用,因为你甚至不知道是什么确切的步骤使它起作用.可能您删除主机头部分,然后以管理员身份运行 VS,然后 IIS Express 工作进程具有激活站点绑定的所有权限。【参考方案5】:

您需要为您的 PC 名称添加新绑定或将绑定更改为 *:&lt;port&gt;:*:&lt;port&gt;:,然后使用 高级安全 Windows 防火墙允许该端口。

要查看的文件是第 167 行附近的 &lt;solution folder&gt;\.vs\&lt;project name&gt;\config\applicationhost.config

【讨论】:

以上是关于Android Emulator 环回 IIS Express 不起作用,但可以与 Cassini 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

Android AVD启动报错:emulator: ERROR: x86_64 emulation currently requires hardware acceleration! Please e

Android 低功耗蓝牙 (BLE) 环回

转: android emulator 命令详解

无法在 Android Studio 中运行模拟器

Android Studio模拟器遇到The emulator process for AVD New_Device_API_29 was killed处理方式

Ubuntu android studio AVD 错误:Emulator: emulator: ERROR: VkCommonOperations.cpp:540: Failed to create