背景
因此,我们拥有一个Web应用程序套件(FWIW,它们是Webforms),我们希望最终将其从专用的盒子迁移到Azure。
这些WebApp的现有层次结构类似于以下内容:
http://example.com/folder1/App1/StartPage.aspx
http://example.com/folder1/App2/StartPage.aspx
http://example.com/folder1/AppX/StartPage.aspx
http://example.com/folder2/App1/StartPage.aspx
http://example.com/folder2/App2/StartPage.aspx
http://example.com/folder2/AppX/StartPage.aspx
动人的动感
我们已经开始尝试Azure“应用服务”,因为在我们的案例中这些服务看起来类似于WebApp。
我们创建了一个名为“ NewAzureApp”的新AppService,并将我们的应用程序代码上传到了该服务。快速ping命令表明可以从以下位置访问它 'http://NewAzureApp.azurewebsites.net/'
在我们专用的框(运行带有IIS的Windows Server)上,我们创建了新的' folder3 '和' App1 '文件夹(分别声明它们是一个应用程序)和使用重写网址工具来定位我们新的实验性AzureApp
web.config(在“ folder3 / App1 ”中)包含如下部分:
<system.webServer>
<rewrite>
<rules>
<rule name="ReverseProxyInboundRule1" enabled="true" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="http://NewAzureApp.azurewebsites.net/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
这使我可以通过网址“ http://NewAzureApp.azurewebsites.net”来部署“ http://example.com/folder3/App1/”
但是有一些问题。
问题
从本质上讲,该应用程序似乎不再了解它正在子文件夹中运行。这是可以理解的,因为实际上不是。
这会导致以下问题:
当我通过“ folder2”版本查看App1时,源代码呈现如下内容:
<script src="/folder2/App1/WebResource.axd?d=SomeLongString;t=Somenumber" type="text/javascript"></script>
据我所知,这就是浏览器看到的内容,因此可以到达计算出的网址...
http://example.com/folder2/App1/WebResource.axd?d=SomeLongString;t=Somenumber
...然后浏览器将其访问,以从存储在框架本身中的某种资源dll内部提取一些javascript。非常聪明,可以正常工作。
当我通过“ folder3”版本查看新的“ App1”时,源代码将呈现为没有文件夹结构。即像这样:
<script src="/WebResource.axd?d=SomeLongString;t=Somenumber" type="text/javascript"></script>
此代码发送回浏览器,浏览器将此代码与我的域结合在一起以生成...
http://example.com/WebResource.axd?d=SomeLongString;t=Somenumber
自然,在我网站的此级别上没有任何处理程序或模块可用于处理此请求。因此,一些通常可以正常运行的内置设备将失败。
理想情况下,我会发出一些指令,或者安排一些配置,这些指令可能会覆盖此位置自动检测。到目前为止,我什么都没发现。
仅供参考,同样的困扰似乎会影响类似ScriptResource.axd引用的呈现。
一种替代方法
当我找不到位置更改解决方案时,我试图更改我的实际应用程序的位置。
我的理论是我无法说服我的应用程序渲染“ / folder3 / App1 /”,因为就天青而言,它不在“ / folder3 / App1”中。 因此,如果我确实将其放置在文件夹中,则它将正确呈现,并且可以重定向到该设备,一切都会好起来。
我尝试了以下操作:
更改文件夹映射。
'/ folder3 / App1 /'映射到'site \ wwwroot' **保存这些设置很好。
访问专用框并从以下位置更改了重写指令:
.. to ..
<action type="Rewrite" url="http://NewAzureApp.azurewebsites.net/folder3/App1/{R:1}" />
...看起来确实应该起作用。
我尝试访问http://example.com/folder3/App1/StartPage.aspx,并收到消息“由于发生内部服务器错误而无法显示该页面。”
这是我的主意:(
摘要
我真的很想知道...
1.>为什么会收到此错误? ->“由于发生内部服务器错误,因此无法显示该页面。”
...还有可能更重要的是...
2.>是否有[更好的方法/任何方法]解决Webresource.axd和ScriptResource.axd解决问题。
在此先感谢您提供的任何有用信息
(注意:我们在几个页面上使用ScriptManager,以允许使用UpdatePanels等。这些ScriptManager非常有用。它们自己没有声明任何脚本引用。我不确定如果ScriptManagers或其他某种机制负责WebResource.axd和ScriptResource引用的呈现,但是为了完整性起见,在这里我将其提及。)