从其他设备访问Azure模拟器

时间:2013-05-27 18:10:14

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

我有两个不同的项目:

  1. Windows Phone 8应用程序,我在一个真实的物理开发设备上运行。
  2. Azure Cloud服务,其中包含一个包含ASP.NET MVC WebAPI的简单WebRole端点。
  3. 我的目标很简单:
    使用从真实设备运行的WP8应用程序,在将WebAPI控制器部署到Azure仿真器时访问(使用HTTPClient)。

    做什么工作:

    1. 当应用程序在Azure云上部署时,可以成功与WebApi进行通信。
    2. 当应用程序在IIS Express(无Azure)上本地托管时,应用程序可以成功与WebApi进行通信,并且在this文章之后更改了IIS Express设置。
    3. 据我所知,问题是Azure模拟器配置为侦听IP地址127.0.0.1,该地址无法从localhost域外部访问。

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

      本地测试与Azure Cloud Service通信的WP8应用程序真的不可能吗?

6 个答案:

答案 0 :(得分:10)

我弄清楚如何让手机模拟器或连接的物理Windows Phone设备与Azure模拟器进行通信。

对于其他挣扎于同一要求的开发人员,以下是其工作所需的步骤:

假设:

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

    1. 打开"C:\Program Files\Microsoft SDKs\Windows Azure\Emulator\devfabric\DevFC.exe.config"进行修改。
    2. "VipPoolStartIPAddress""VipPoolEndIPAddress"设置为您的托管计算机IP(例如192.168.1.100)
    3. 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选择框中选择)。
        • 编辑存储的连接字符串
        • 手动输入凭据
        • 帐户名称和帐户密钥记录在accounts
        • DSServiceSQL.exe.config部分下
        • 使用您的托管IP指定自定义端点。
      4. enter image description here

        享受!

答案 1 :(得分:3)

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

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

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

    netsh interface portproxy add v4tov4 listenport=8088 connectaddress=127.0.0.1 connectport=81 protocol=tcp

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

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

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

答案 2 :(得分:2)

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

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

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

  3. 选择一个名称,然后点击Next。在下一个面板(“添加服务器”)中添加您在步骤1和Finish中收集的所有网址。

  4. 当系统询问您是否要为此服务器场创建相应的Yes时,请点击Rewrite Rules

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

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

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

答案 3 :(得分:2)

我知道这已经得到了解答,但目前尚未发布此问题的简单解决方案。以下是我让我的Mac与我的局域网上运行的我的Azure存储模拟器(v4.3)进行通信所做的工作。

在撰写本文时,我正在使用Azure存储模拟器的v4.3运行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. 的文件
  5. StorageEmulatorConfig部分中,编辑每项服务,使其如下所示。显然要更换" xxx.xxx.xxx.xxx"用你的实际IP地址...但保持端口相同! enter image description here
  6. 接下来,转到防火墙设置。我们需要允许将您计算机的IP地址的入站连接到StorageEmulatorConfig部分中列出的上述三个端口。在控制面板下 - >系统和安全 - > Windows防火墙 - >高级设置 - >入站规则,点击屏幕右侧的New Rule...。您将通过向导运行以设置新规则。我将概述下面要做的事情:
  7.   

    规则类型:选择Custom

         

    计划:选择Customize...,然后选择Apply to services only

         

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

         

    范围:跳过此部分,将其应用于所有IP地址   简单的缘故

         

    操作:允许连接

         

    个人资料:根据您运行的连接配置文件,您可以   应该选择合适的一个。就我而言,我的电脑是   连接到我家的局域网,所以我连接到私人   网络。我取消选择了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存储模拟器的设备上打开浏览器,并尝试访问以下网址:

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

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

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

    3. 如果您收到回复,请回复:

        

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

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

      重要的是要注意,您必须更新项目的.config文件中的连接字符串,在该文件中您要生成访问图像的网址(假设您正在做的事情) )。您可能不会更长时间地使用开发连接线!必须更新为:(将xxx.xxx.xxx.xxx替换为上面的IP地址:

        

      DefaultEndpointsProtocol = HTTP;帐户名= 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' s很好地格式化它,那么您将打破该字符串,并且存储组件不会将其识别为有效的连接字符串。所以保持一个很长的烦人的字符串。

答案 4 :(得分:1)

我找到了一种方法,感谢this great post

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

我做路由的方式是使用名为PassPort的简单应用,但我认为有很多替代方案。

答案 5 :(得分:0)

由于Azure模拟器的不稳定性,建议使用端口转发。但是,当connectaddress使用我的Windows 7上的内置工具netsh时,{{1}}为127.0.0.1时,它无法正常工作(有关详细信息,请参阅problem with adding a portproxy using netsh)。我搜索并找到PassPort port forwarding utility Win XP来帮助我进行端口转发。 enter image description here