4

我有两个不同的项目:

  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之后更改了设置。

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

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

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

4

6 回答 6

11

我想出了如何让电话模拟器或附加的物理 Windows Phone 设备与 Azure 模拟器通信。

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

假设:

  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选择框中选择它)。
    • 编辑存储的连接字符串
    • 手动输入凭据
    • 帐户名称和帐户密钥写在下面的accounts部分DSServiceSQL.exe.config
    • 使用您的托管 IP 指定自定义端点。

在此处输入图像描述

享受!

于 2013-08-19T13:24:06.520 回答
4

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

  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)。

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

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

于 2015-11-20T05:57:14.750 回答
4

我知道这已经得到了回答,但是还没有发布这个问题的简单解决方案。这是我为让我的 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 typeTCP和设置 Remote portSpecific Ports并在输入框中输入 10000-10002。这会将本 StorageEmulatorConfig节中指定的端口范围添加到此规则中,进而允许通过这些端口进行传入连接。

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

行动:允许连接

配置文件:根据您运行的连接配置文件,您应该选择合适的配置文件。在我的情况下,我的计算机连接到我家的 LAN,所以我连接到了专用 网络。我取消选择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 不代表服务器上的任何资源。

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

请务必注意,您必须更新项目的 .config 文件中的连接字符串,在该文件中生成 URL 以访问您的图像(假设您正在这样做)。您可能不再使用开发连接字符串快捷方式!它必须更新为:(将 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 很好地格式化它,你会破坏字符串并且存储组件不会将它识别为有效的连接字符串。所以保留一根长长的烦人的字符串。

于 2016-05-04T20:39:41.263 回答
2

由于您已经在使用(常规)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. Yes当询问您是否要Rewrite Rules为此农场创建适当的时单击。

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

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

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

于 2013-05-27T18:57:13.577 回答
1

我找到了一种方法,感谢这里的这篇很棒的帖子

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

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

于 2013-06-21T10:29:39.260 回答
0

由于 Azure Emulator 不稳定,建议使用端口转发。connectaddress但是,当127.0.0.1 在我的 Windows 7 上使用内置工具时它不起作用netsh(详见:使用 netsh 添加端口代理的问题)。我搜索并找到PassPort 端口转发实用程序 Win XP来帮助我进行端口转发。 在此处输入图像描述

于 2018-03-22T12:47:29.043 回答