并行桌面:从OS X(主机)访问本地IIS web应用程序



我正在使用Parallels Desktop在OS X上运行Windows 10(网络处于共享模式)。我需要从主机访问在Visual Studio上创建并在IIS 10上运行的web应用程序。例如,对于在Windows上运行的通用应用程序http://localhost:1654我想用类似http://[ip_virtual_machine]:1654的东西从Mac浏览器访问它。

我做的第一件事是完全关闭Windows防火墙,在公共和专用网络上禁用它,还禁用了services.msc中的防火墙服务。接下来,我检查了主机和虚拟机的ip地址。在Mac上运行ifconfig,我得到虚拟机的IP地址为10.211.55.2,而在Windows上运行ipconfig,我得到VM的IP地址是10.211.55.3(带网关10.211.55.1)。

我已尝试使用以下两种方法访问web应用程序http://10.211.55.2:1654/和http://10.211.55.3:1654/但是运气不好。对于前者,我得到一个Bad Request-Invalid Hostname响应,而对于后者,我得到ERR_CONNECTION_REFUSED。

如果防火墙仍在做一些事情,我还添加了一个入站规则来允许端口1654的连接,但结果相同。

我还注意到一件事:在C:\Windows\System32\inetsrv\config\applicationhost.config中的applicationhost文件中,没有任何对我在Visual Studio中创建的web应用程序的引用。AFAIK当我在IIS上的Visual Studio中运行web应用程序时,应该将绑定添加到应用程序主机文件中,但我的任何web应用程序都没有条目。我可能对IIS有一些问题吗?

另一件事:另一种方式可行。我可以使用从虚拟机访问Mac上的node.js本地服务器http://10.211.55.2:[端口]。

但我需要访问从Mac到Windows的IIS。我该怎么做?

好的,我开始工作了。附加步骤包括:

1) 以管理员身份打开CMD或Powershell。为您需要的端口添加URL ACL条目:

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

2) 在我的案例中,带有绑定的applicationhost文件直接位于VisualStudio项目文件夹中。具体地说,它位于.vs/config/applicationhost.config中。在文本编辑器中打开文件,找到包含应用程序绑定信息的行,类似

<bindings>
<binding protocol="http" bindingInformation="*:1654:localhost" />                    
</bindings>

添加另一个带有虚拟机IP的条目,如下所示:

<bindings>
<binding protocol="http" bindingInformation="*:1654:localhost" /> 
<binding protocol="http" bindingInformation="*:1654:10.211.55.3" />                   
</bindings>

3) (**可选:可能没有必要***)在应用程序主机文件中,找到条目

<section name="anonymousAuthentication" overrideModeDefault="Deny" />

并将其更改为

<section name="anonymousAuthentication" overrideModeDefault="Allow" />

现在我可以使用从Mac访问IIS上运行的web应用程序http://10.211.55.3:1654住址

希望这能有所帮助。

接受的答案对我不起作用,但在遵循此处概述的步骤后,我终于成功了。我的设置包括在macOS 10.14.2上运行的Parallels 14和在Windows 10上运行的Visual Studio 2017。

总结:

  1. 在Parallels中,确保您的网络类型设置为"共享网络",并启用"与Windows共享Mac应用程序">
  2. 在Windows虚拟机中,打开PowerShell,输入ipconfig,然后复制虚拟机的IPv4地址。然后打开"设置",转到"系统">"关于",并复制虚拟机的设备名称
  3. 在macOS中,在/etc/hosts文件中添加一个条目,该条目将VM的IP地址映射到其设备名称,例如10.211.55.3 your-device-name
  4. 回到您的Windows虚拟机中,在Visual Studio项目的文件夹中,编辑.vs/config/applicationhost.config中的<binding>密钥(注意,.vs是一个隐藏文件夹),以使用您的虚拟机的设备名称,而不是localhost,例如<binding protocol="http" bindingInformation="*:1234:your-device-name" />
  5. 以管理员身份打开PowerShell,运行以下命令以启用外部访问,使用VM的设备名和步骤#4:netsh http add urlacl url=http://your-device-name:1234/ user=everyone中的端口
  6. 打开Windows防火墙并为您的项目添加新的入站和出站规则。对于这两个规则,选择"端口"作为规则类型,选择"TCP"作为协议,从步骤#4输入端口,然后选择"允许连接">
  7. 在Visual Studio中,转到项目的属性,单击"Web"选项卡,然后将项目URL更改为使用Windows设备名,而不是localhost,例如http://your-device-name:1234/。选中"覆盖应用程序根URL"框,然后再次输入相同的URL
  8. 使用"在Mac中打开"浏览器调试您的项目。如果看不到此选项,请单击"浏览方式…",然后单击"添加…",再添加一个指向C:Program Files (x86)ParallelsParallels ToolsSIASharedIntApp.exe的条目

调试后,您的应用程序将在Safari(或任何默认的Mac浏览器)的http://your-device-name:1234启动!

  1. 从windows功能打开IIS(互联网信息服务)
  2. 转到cmd并获取windows虚拟机的ip
  3. 在Mac上,使用windows机器的ip作为本地ip

只需补充一点:当使用asp.net核心和kestrel(在Parallels中),并希望从Host mac连接到正在运行的服务器时,您可以使用guest windows机器的本地ip地址来运行服务器。因此,执行IPCONFIG并获取本地ip地址,然后:

WebHost
.CreateDefaultBuilder()
.UseStartup(startupType)
.UseUrls("https://10.211.55.3:5001")
.ConfigureSettings(servicesToAdd)
.Build()
.Run();

这将允许你连接到例如https://10.211.55.3:5001/api/values从您的主机mac

最新更新