有没有一种方法可以远程调用ASP.NET开发Web服务器?

19

我知道通常情况下是做不到的,也就是让另一台电脑远程调用托管在ASP.NET开发Web服务器下的网站(通常只能使用localhost:端口来访问它)。

但我想知道是否有人看到或者知道绕过这个限制的方法?我在办公室是一个RESTful API开发人员,我希望PHP的开发人员可以在我的电脑上测试API,这样我就可以附加Visual Studio 2005调试器,并且可以更容易地找出问题。

主要问题是,我的机器是Vista机器,不幸的是,我开发的API在IIS7下不起作用,甚至经典应用程序池模式也无法解决(这使得它们无法托管在本地IIS上)。

另外,是否有一种方法可以在另一台机器上使用IIS6来满足我的需求?

更新

根据我得到的建议以及尝试了很多提供的建议后,我成功让Squid充当反向代理并实现了我想要做的事情。 我写了一篇博客 http://www.ashleyangell.com/index.php/2009/03/configuring-a-basic-reverse-proxy-in-squid-on-windows-website-accelerator/,以便其他人也可以做同样的事情。


您可以通过IIS6远程调试计算机。请查看此博客文章以了解如何设置:http://blogs.iis.net/brian-murphy-booth/archive/2008/05/23/remoting-debugging-asp-net-applications-using-visual-studio-2008.aspx 这是vs2005的链接:http://aspnet2holes.blogspot.com/2006/11/debug-aspnet-20-running-under-iis-60.html。我仍然建议检查2008年的链接,因为它有一些额外的评论。 - eglasius
@Ash添加了一个VS 2005的链接。 - eglasius
所以这个选项不会起作用,因为代码需要复制到托管IIS的服务器上。更不用说办公室在域上存在安全问题了。 - Ash
您链接的博客条目已经不存在了。 - Jeroen Wiert Pluimers
抱歉-我移动了我的博客并删除了“blog”子域名。现在已经修复了。 - Ash
9个回答

14

1
已使用 Wayback 更新了链接。 - Matt Kocaj
1
约翰,Wayback链接对你不起作用吗?我刚试了一下,它可以正确地显示文章的副本。 - Matt Kocaj

7
我刚尝试了成功的异步端口转发Python脚本:http://code.activestate.com/recipes/483732-asynchronous-port-forwarding/。它只是将流量转发。
假设你的开发服务器所在的机器是192.168.42.42,开发服务器上的端口是12345,请使用命令行参数在同一台计算机上运行该脚本。
-l 192.168.42.42 -p 8000 -r 127.0.0.1 -P 12345

从另一台机器上,你可以通过 http://192.168.42.42:8000 访问服务器。

请确保按照Dwight Walker在评论中指出的更改 sender.handle_close

def handle_close(self):
    self.close()
    if len(self.receiver.to_remote_buffer) == 0:
        self.receiver.close()

3

你不能只在 经典应用程序池模式 下运行IIS7吗?

开发Web服务器严格限制在本地主机上,您需要反编译并重新编译它,或在计算机上设置某种代理。

关于无关的话题:尽管Win2003 Server SP2 R2应该支持到2012年3月,但可能应该添加对你的应用程序的IIS7支持,以确保你也可以在2008 Server上运行。


已经尝试过了,虽然明显的限制不好,但由于我的雇主限制,目前还不可能实现。最终我希望能够将我的API迁移到ASP.NET MVC框架(或者更好的是Ruby),但目前这是不可能的。 - Ash
我该如何为它设置代理?我认为这需要一个反向代理,但是怎么做呢? - Ash
好问题,我自己从未设置过(我只知道它们的存在),但我看到了一篇关于编写一个的文章(具有讽刺意味的是,它运行在IIS上):http://www.codeproject.com/KB/web-security/HTTPReverseProxy.aspx - Michael Stum
我不确定代理是否可行,即IP数据包是否能够到达足够低的级别,使Web服务器显示为本地。 - cdonner
代理服务器不应该透明吗?虽然我已经有一段时间没有通过反编译运行Web服务器了,但我认为检查纯粹基于IP,所以我认为这应该可以工作。但是,正如我所说,我从未自己设置过代理,所以这只是理论。 - Michael Stum

2

基本上,我花了5个小时才使这个工作正常运行,但如果你想要一个5分钟的解决方案,那么请看下面:

1. Port forward incoming traffic to your local ip on your network
TCP Any -> 3127-3128
TCP Any -> 80-81
TCP Any -> 8080
TCP Any -> 8000
TCP Any -> 8888
to
192.1681.1.3 (the local ip of the machine running .NET Dev server.)

2. Download SPI Port Forward

3. Heres the tricky part - Setup 2 forwarding rules as follows:
Local port: 8080 Remote: localhost Remote port 8080
Local port: 8080 Remote: localhost Remote port: .NET Dev server port

Without that second rule the .NET dev server wont serve the page

4. now visit your public IP address at port 8080 -- and you got it

Z


这似乎不起作用。您不能两次绑定两个本地端口(8080)。也许这是一个打字错误? - Sha
SPI PortForward 可以允许多个端口转发,从而实现循环 :) 这就是它能够正常工作的原因。 - DropHit

1
你可能想要看一下UltiDev的Cassini web server版本。他们采用了微软开源的Cassini Web服务器,并对其进行增强,允许远程连接等等。
您可以将VS附加到进程中,并像上面描述的那样从PHP应用程序中调用您的RESTful API。

我成功地让Cassini运行我的Web应用程序,其他办公室的电脑可以访问,这正是我想要的,但我无法将其调试Web应用程序 - 符号无法加载,因此我无法进行调试。我尝试附加到运行站点的进程,但它不允许我这样做。 - Ash

1

只需使用简单的Java TCP隧道即可。下载此Java应用程序,然后将流量隧道返回。无需与IIS搞在一起!

http://jcbserver.uwaterloo.ca/cs436/software/tgui/tcpTunnelGUI.shtml

在命令提示符中,您可以像这样运行Java应用程序...假设您想要在端口80上进行外部访问,并且您的标准调试环境在端口1088上运行...
java -jar tunnel.jar 80 localhost 1088 (此处也有答案:访问asp.net开发服务器以外的虚拟机)

0

0

0
将IIS 7切换到经典管线并不能解决您的兼容性问题吗? VS 2005拥有远程调试器,许多以前的版本也有。

我尝试将我的项目设置为“使用IIS Web服务器”,但它不允许我这样做 - 告诉我该功能仅适用于本地IIS安装。 :( - Ash
能否设置项目以便自动部署到那台 IIS 机器上?我以前从未进行过远程调试。 - Ash
您需要在服务器上安装并运行远程调试器,然后使用VS调试菜单中的“附加到进程”功能进行连接。 - cdonner
如果您的项目是标准的网站或Web应用程序,那么您可以从Visual Studio部署到服务器。 - cdonner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接