需求前言:最近会经常修改一些网站前端的内容,为了方便跟UI和产品交流,需要将自己修改过的页面及时发布到测试机或者是本地的IIS上。而为了熟悉IIS的一些应用,所以先将项目发布在了本地IIS上,这其中遇到了一些问题,现在解决之后,就记录下来,留待后用。
这里如何启用并配置IIS就不多说了,主要想记录下来的是在试运行过程中所遇到的一些问题。
配置IIS的几个关键点:
1.URL重写模块,这个以前是ISAPI筛选器的功能,后来好像就改版了,都成模块化设计了。(URL rewrite 下载链接)
2.ASP.NET MVC项目有路由机制,所以不需要用到IIS中默认文档功能以及目录浏览功能。
3.记得检查应用程序池的 .NET Framework版本,配置成v4.0版本。
4.身份验证上一般不用管,IIS默认使用的是“匿名身份验证”。
三大问题
1.试运行时无法正常访问网站,报错如下:
错误摘要
HTTP 错误 403.14 - Forbidden
Web 服务器被配置为不列出此目录的内容。
主要原因本地项目的web.config 文件出错,缺少一行代码,补上就好,代码如下:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
system.webServer>
附上参考链接:点我
2.上面这个问题解决后,再次运行报CS0016未能写入输出文件错误,这里的问题是IIS所对应的组或用户没有访问本地文件夹C:\Windows\TEMP的权限,进入到temp文件夹的属性窗口的安全选项卡,进行修改。
3.来自项目本身,这个涵盖面就很广了。我遇到的主要是两个方面的问题:
3.1 来自JS文件的逻辑判断,用到了 documen.domain属性,可以用该属性获得当前的URL中的服务器名称或是IP地址,以此来进行判断,运行网站的当前用户是否合法。
3.2 来自对网站中各个URL入口的设置。这里有个背景交代:在线下调试时URL中的服务器名称一般都是 “localhost:端口号”,而在线上则会替换成相应的域名,为了修改方便,有以下的设置方式:
web.config 文件中:
<appSettings>
<add key="Domain" value="http://localhost:7676"/>
<add key="Host" value="localhost"/>
appSettings>
某静态类中:
public static partial class WebUIHelper
{
public static readonly string dominUrl = ConfigurationManager.AppSettings["Domain"];
}
某页面中:
@{
var hostUrl = WebUIHelper.dominUrl;
}
"@(hostUrl)/***/">
综上 发布到IIS上时记得 修改web.config文件。
结语
1.全栈工程师是很厉害的。全栈工程师=基础知识深厚+完善的机器模型+计算机网络+各种前后端语言。
2.不想了解产品逻辑的程序员当不了一名合格的工程师。