【问题标题】:Accessing Azure Emulator from Another Device从其他设备访问 Azure 模拟器
【发布时间】:2013-05-22 14:55:33
【问题描述】:

我有两个不同的项目:

  1. Windows Phone 8 应用程序,我在真实的物理开发设备上运行。
  2. Azure 云服务,其中包含一个简单的 WebRole 端点,其中包含一个 ASP.NET MVC WebAPI。

我的目标很简单:
使用从真实设备上运行的 WP8 应用程序,在将 WebAPI 控制器部署到 Azure 模拟器时访问(使用 HTTPClient)。

做什么工作是:

  1. 应用部署在 Azure Cloud 上时,可以成功与 WebApi 通信。
  2. 当应用程序本地托管在 IIS Express(不使用 Azure)时,应用程序可以成功与 WebApi 通信,并且 IIS Express 设置在 this 文章之后更改。

据我了解,问题在于 Azure 模拟器配置为侦听 IP 地址 127.0.0.1,无法从 localhost 域外部访问。

我发现这个post 提供了一个解决这个确切问题的方法,但是在尝试部署到 Azure 模拟器时尝试遵循它会导致未知异常。

真的无法在本地测试与 Azure 云服务通信的 WP8 应用程序吗?

【问题讨论】:

    标签: c# asp.net-mvc azure windows-phone-8 asp.net-web-api


    【解决方案1】:

    由于 Azure Emulator 不稳定,建议使用端口转发。但是,当 connectaddress 为 127.0.0.1 时,在我的 Windows 7 上使用内置工具 netsh 时它不起作用(详见:problem with adding a portproxy using netsh)。我搜索并找到PassPort port forwarding utility Win XP 来帮助我进行端口转发。

    【讨论】:

      【解决方案2】:

      我知道这个问题已经得到解答,但尚未发布针对此问题的简单解决方案。以下是我为让我的 Mac 与我的整个 LAN 上的 PC 上运行的 Azure Storage Emulator(v4.3) 通信所做的工作。

      在撰写本文时,我正在运行带有 v4.3 的 Azure 存储模拟器的 Windows 10 版本 1511。

      1. 确保 Azure 存储模拟器已关闭。你可以通过打开 Azure 存储模拟器命令提示符来做到这一点。您可以通过在“开始”菜单中键入 Azure Storage Emulator 来找到它。打开后,输入AzureStorageEmulator stop
      2. 获取运行 Azure 存储模拟器的计算机的 IP 地址。在您已经打开的命令提示符中键入ipconfig。查找 IPV4 地址 - 应该类似于 192.168.1.xxx
      3. 打开位于C:\Program Files (x86)\Microsoft SDKs\Azure\Storage Emulator\AzureStorageEmulator.exe.config 的文件
      4. StorageEmulatorConfig 部分中,编辑每个服务,使其如下所示。显然将“xxx.xxx.xxx.xxx”替换为您的实际IP地址......但保持端口相同!
      5. 接下来,转到您的防火墙设置。我们需要允许您的计算机 IP 地址的入站连接到上面StorageEmulatorConfig 部分中列出的这三个端口。在控制面板 -> 系统和安全 -> Windows 防火墙 -> 高级设置 -> 入站规则下,单击屏幕右侧的New Rule...。您将通过向导来设置新规则。我将在下面概述要做什么:

      规则类型:选择Custom

      程序:选择Customize...,然后选择Apply to services only

      协议和端口:将 Protocol type 设置为 TCP 并设置 Remote portSpecific Ports 并在输入框中输入 10000-10002。这将添加指定的端口范围 StorageEmulatorConfig 部分到此规则并反过来允许 通过这些端口的传入连接。

      范围:跳过此部分,使其适用于所有 IP 地址 简单起见

      操作:允许连接

      配置文件:根据您运行的连接配置文件,您 应该选择合适的。就我而言,我的电脑是 连接到我家的 LAN,所以我连接到 Private 网络。我取消了DomainPublic。我建议做 一样的。

      名称:Azure 存储模拟器

      点击完成,你就完成了!...与那部分......

      1. 打开管理员提升的命令提示符并输入以下命令(注意:将 xxx.xxx.xxx.xxx 替换为您的 IP 地址!!!):

        netsh http add urlacl url=http://xxx.xxx.xxx.xxx:10000/ user=everyone

        netsh http add urlacl url=http://xxx.xxx.xxx.xxx:10001/ user=everyone

        netsh http add urlacl url=http://xxx.xxx.xxx.xxx:10002/ user=everyone

      2. 在您尝试连接到 Azure 存储模拟器的设备上打开浏览器并尝试访问以下 URL:

        http://xxx.xxx.xxx.xxx:10002/

        http://xxx.xxx.xxx.xxx:10002/

        http://xxx.xxx.xxx.xxx:10002/

      如果你得到这样的回复:

      InvalidUri 请求的 URI 不代表服务器上的任何资源。

      那么你就是金子......如果没有,发表评论,我会更新我的回复。

      请务必注意,您必须在生成 URL 的项目的 .config 文件中更新连接字符串以访问您的图像(假设您正在这样做)。您可能不再使用开发连接字符串快捷方式!必须更新为:(将 xxx.xxx.xxx.xxx 替换为上面的 IP 地址:

      DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://xxx.xxx.xxx.xxx:10000/devstoreaccount1;TableEndpoint=http://xxx.xxx.xxx.xxx:10002/devstoreaccount1;QueueEndpoint=http://xxx.xxx.xxx.xxx:10001/devstoreaccount1;

      如果您在 AppSettings 部分中有此设置,并且使用 \n 对其进行了很好的格式化,您将破坏该字符串,并且存储组件不会将其识别为有效的连接字符串。所以保留一个长的烦人的字符串。

      【讨论】:

        【解决方案3】:

        您不需要任何外部应用程序来执行此操作。尝试使用以下端口转发:

        1. 在 Azure 模拟器中运行您的应用程序,然后通过右键单击系统托盘中的 IIS Express 图标(例如 127.0.0.1:81)找出其 IP 和端口

        2. 现在选择一个要监听的端口(比如 8088)并将其传入的请求转发到您的应用程序,只需在提升的命令提示符下执行以下命令即可:

          <strong>netsh interface portproxy add v4tov4 listenport=8088 connectaddress=127.0.0.1 connectport=81 protocol=tcp</strong>

        3. 如果防火墙正在运行并且您选择的端口被阻止,则通过向 Windows 防火墙添加入站规则来打开端口(本例中为 8088)。

        现在使用您的计算机 IP 进行浏览,例如 192.168.0.100:8088,现在您应该可以访问您的应用程序了。这可以通过您的 WP 或 Cordova(移动)应用程序在本地进行测试。希望这会有所帮助。

        (如果要删除端口转发,只需使用netsh interface portproxy命令的delete开关即可。)

        【讨论】:

        【解决方案4】:

        我想出了如何让 Phone Emulator 或附加的物理 Windows Phone 设备与 Azure Emulator 通信。

        对于遇到相同要求的其他开发人员,以下是其工作所需的步骤:

        假设:

        1. 您知道主机的 IP 地址。
        2. 没有防火墙阻止访问
        3. 关闭 IIS 和 Azure 模拟器并在配置更改后重新启动它们

        Azure 计算模拟器:

        1. 打开"C:\Program Files\Microsoft SDKs\Windows Azure\Emulator\devfabric\DevFC.exe.config" 进行编辑。
        2. "VipPoolStartIPAddress""VipPoolEndIPAddress" 设置为您的主机IP(例如192.168.1.100)

        Azure 存储模拟器:

        1. 打开"C:\Program Files\Microsoft SDKs\Windows Azure\Emulator\devstore\DSServiceLDB.exe.config""C:\Program Files\Microsoft SDKs\Windows Azure\Emulator\devstore\DSServiceSQL.exe.config" 进行编辑。
        2. 两个文件中的services部分设置为使用托管IP。
        3. 在“角色”设置中配置存储连接字符串(而不是默认的Windows Azure storage emulator 设置):
          • 右击Role(在解决方案资源管理器的“角色”文件夹下)进入Properties页面。单击Settings 选项卡。确保编辑Local 设置(在Service Configuration 选择框中选择它)。
          • 编辑存储的连接字符串
          • 手动输入凭据
          • 帐户名称和帐户密钥写在DSServiceSQL.exe.config 中的accounts 部分下
          • 使用您的托管 IP 指定自定义端点。

        享受吧!

        【讨论】:

        • 我真的很喜欢这种方法,直到我尝试保存角色配置更改时得到:“存储帐户凭据必须使用 HTTPS 协议”。 ://
        • 模拟器文件位置已更改。您可以在以下位置找到文件:C:\Program Files (x86)\Microsoft SDKs\Azure\Storage Emulator\WAStorageEmulator.exe.config 和 C:\Program Files\Microsoft SDKs\Azure\Emulator\DevFC.exe 中的结构。配置
        【解决方案5】:

        我找到了方法,感谢this great post here。

        显然,通过将发送到我的本地 IP 地址(例如 192.168.0.1)的任何流量重新路由到 127.0.0.1,我现在能够针对 Azure Cloud Emulator 实例使用 Windows Phone 8 模拟器。

        我进行路由的方式是使用一个名为PassPort 的简单应用程序,但我认为有很多替代方案。

        【讨论】:

        • 另一种方法对我不起作用,但这种方法在 Win 8 上的 VS 2012 上完美运行
        • 很高兴知道。奇怪的是,另一个没有工作。哪里错了?我一直用另一种方法,效果很好……
        • 我在 Windows 8 上使用 VS 2012 和 IIS Express。更改 DevFC.exe.config,重新启动服务,甚至启动我的机器。禁用了我的固件。确保一切都以管理员身份运行。但是web角色刚刚跳转到127.0.0.3而不是我的外部IP
        【解决方案6】:

        由于您已经在使用(常规)IIS 并且您声称它有效,您可以使用 Server Farming 作为某种 Reverse Proxy + Load Balancer 来实现您的目标:

        1. 运行您的 WebRole 项目并保存内部 Url(如图 127.255.0.2:82 所示)。

        2. 打开IIS Manager > Server Farms > Create Server Farm

        3. 选择一个名称并单击Next。在下一个面板(“添加服务器”)中添加您在第 1 步中收集的所有 URL 和 Finish

        4. 当系统询问您是否要为此农场创建适当的 Rewrite Rules 时,请单击 Yes

        5. Server Farms 列表下,单击您的新农场并从右侧的图标中选择Proxy,选中Reverse rewrite host in response headers 复选框。

        6. 您现在可以使用常规 IIS 绑定地址来访问 Emulator 实例(一旦运行)。

        P.S:如果您想撤消此更改,请删除农场。然后点击左侧树中你的计算机/服务器名称(根项),右侧选择Url Rewrite,删除ARR规则。

        【讨论】:

        • 谢谢!我会尽快检查出来,我会回到这个帖子来查看结果
        • 我了解这些设置在 IIS 上可用,在 IIS Express 上不可用。对吗?
        • 感谢您的帮助。尽管您的回答很有帮助,但这不是我希望的答案。我有多个开发平台,我不想在所有平台上都安装完整的IIS
        • 我也不认为它是“正确”的答案,我认为您需要专注于如何让 IIS Express 监听非 127.* 地址。
        猜你喜欢
        • 2012-06-21
        • 2015-09-14
        • 2020-04-05
        • 2021-11-17
        • 1970-01-01
        • 1970-01-01
        • 2020-04-23
        • 2011-08-04
        • 2022-01-23
        相关资源
        最近更新 更多