如何在IIS6,7部署ASP.NET网站

Windows IIS搭建ASP网站的流程和注意事项 windows 通过IIS服务搭建ASP网站 阅读详情

在我的第一篇博客中,我发布过一个示例项目,主要演示了我的我的AJAX框架和我的通用数据访问层。虽然在当初我认为我已考虑地比较周全了,而且还提供了足够的说明文档,但在发布后的将近一年的时间里,还是有不少人给我发邮件,问我一些关于不能运行示例的问题。在所有问题中,主要集中在IIS和SQL SERVER的配置方面。因此,我认为还是有必要再来谈一下在IIS6/7以及SQL SERVER中部署ASP.NET网站的过程了。

在上篇博客【写自己的ASP.NET MVC框架(下)】中,我又发布了一个示例项目,它也包含一个网站项目,今天的介绍过程将主要以这个示例为主。对于以前的示例所需配置的相同部分将不会重复介绍,不同点则会额外补充。

查看web.config文件

ASP.NET网站与一般的桌面程序不同,不是拷贝过来就能运行的(数据库连接除外)。要想运行它,通常需要一些配置过程。
但是,我们到底需要配置什么呢?
答案是:查看web.config

web.config通常会放在网站的根目录,这个文件中包含了一最重要的网站运行参数。比如:connectionStrings,httpHandlers,httpModules ,这些参数都是网站开发人员认为运行网站所必需的参数。因此,如果我们想将一个网站部署到IIS中,必须首先打开web.config文件,逐个确认这些重要的参数是否符合要求。

这里要补充一点的是:有些开发人员喜欢将各类参数放在appSettings配置节中,即便是数据库的连接字符串也放在appSettings中。我只能说:这是个很不好的习惯。因此,在部署这类网站时,可能还要注意一下appSettings是否包含数据库的连接字符串,这就需要人工识别了。当然了,appSettings中还可能包含一些重要目录配置,同样,也只能人工识别了。

今天要讲述的参数主要涉及到IIS和SQL SERVER,因此本文将会分开介绍它们。
而且IIS还会分为6和7.5二个版本来单独演示。
SQL SERVER则以 2005 Express版本来演示。
我演示所用的操作系统为:Windows Server 2003和Windows 7 ,它们分别附带了IIS 6和IIS 7.5

说明:通常我们在部署网站时,都应该先根据web.config定义的那些重要参数来配置网站。但为了让您能对这些参数有较深刻的印象,下面的演示中,不是先根据web.config来配置网站,而是采用【从创建一个站点后,一步一步地发现问题并解决】的方式来讲解这个过程。

在IIS中创建网站

每个ASP.NET程序都是一个网站,要想运行它们,都需要在IIS中部署它们,部署的第一步就是要在IIS创建一个网站。在IIS中创建网站的过程比较简单,因为IIS都提供向导界面来帮助我们完成这个配置过程,因此,本文打算省略那些无意义的贴图。

说明,我们先从IIS6开始。这里只要求您在IIS中创建一个网站,把它配置成网站就可以了,其它的配置我们后面再谈。
示例项目:点击此处进入 MyMVC DEMO 下载页面

网站创建好了吗?我停下来等一下吧。

我的网站配置好了,现在已经可以用浏览器访问它。

现在我们可以切换风格来试试效果,点击页面右上角的【3】试试看。

噢,怎么一开始就出错了:

看到这个提示,不要茫然。为了界面友好,我用JavaScript捕获了这个错误,但现在我们需要知道错误的原因是什么,怎么办呢?

有FireBug或者Fiddler2吗?
如果有,就打开它们吧。下图是我用FireBug看到的错误原因(需要重新执行刚才的操作):

从FireBug中,我们可以看到,刚才的操作触发了一次请求,请求的地址是:/AjaxStyle/SetStyle.cspx
cspx是个什么扩展名呢?还是打开web.config看一下吧。

<httpHandlers>
    <add path="*.cspx" verb="*" type="MyMVC.AjaxHandlerFactory, MyMVC" validate="true" />
    <add path="*.aspx" verb="*" type="MyMVC.MvcPageHandlerFactory, MyMVC" validate="true" />
    <add path="/mvc/*" verb="*" type="MyMVC.MvcPageHandlerFactory, MyMVC" validate="true" />
</httpHandlers>

在web.config中,网站要求配置的一些httpHandlers中,第一个便是针对【cspx】扩展名的。

这里我要解释一下【cspx】这个扩展名了。在以前的示例中,我选择了【cs】这个扩展名表示一个AJAX调用,但是,后来发现很多人在IIS中部署中遇到问题了(原因后面再说)。于是,这次我换了个扩展名。然而,又有人问我:cspx, 是不是写错了? 或许他认为应该是【aspx】才对。

这个问题我用邮件回答过多次了,今天用博客的形式再回答一次:
取什么扩展名都不重要,我只要选择没有用过的扩展名来区分是AJAX调用就可以了。我也可以取【fish】来做为AJAX请求地址的扩展名,只是担心一些人认为俗气而已。

IIS6 添加扩展名映射

回到IIS,在网站节点上,右击,从弹出的菜单中,选择【属性】,然后在弹出的对话框中,选择【主目录】选项卡,并点击【配置】按钮。此时的界面应该是这样的:

找到【ascx】这个扩展名,双击它,是不是弹出下面这个对话框?

照着图片的操作去完成:复制【可执行文件】的设置路径。然后点击【取消】关闭对话框。

此时将回到【应用程序配置】对话框,点击【添加...】按钮,

照着图片操作吧。对话框中的【可执行文件】的参数,此时已在Windows剪切板中,现在只要粘贴就可以了。

全部【确定】,关闭所有对话框,再回到浏览器,然后再试一次。

现在可以操作了吧?

先不要点击其它链接,还是来对刚才的操作做个小结吧。

在ASP.NET中,有时候我们可能会需要创建自己所需的HttpHandler来处理一些特殊的请求。
我的MyMVC框架就有这个需求:将AJAX请求与页面的请求分开来处理。
所以我们需要一些特殊格式的URL。通常选择一个没用过的扩展名会比较方便,因此我选择了 cspx
为了能告诉ASP.NET将以下格式的ULR映射到AjaxHandlerFactory

/Fish.AA.AjaxTest/Add.cspx
/Fish.BB.AjaxTest.Add.cspx
/Fish/BB/AjaxTest/Add.cspx
/AjaxDemo/GetMd5.cspx
/AjaxDemo.GetMd5.cspx

我就需要在web.config中注册这种URL模式,并且为了能最好的匹配这些URL,我可以使用下面的配置:

<httpHandlers>
    <add path="*Ajax*/*.cspx,*Ajax*.*.cspx" verb="*" 
                                type="MyMVC.AjaxHandlerFactory, MyMVC" validate="true"/>
</httpHandlers>

我们可以用Visual Studio自带的WebDev.WebServer.EXE来运行网站程序。
本来,这一切都是很完美的。
可是,IIS中并不支持这么复杂的path设置,它只能支持简单的扩展名映射。
所以,我也只好使用简单的扩展名:【.cspx】来向IIS注册。

我再来解释一下,为什么在ASP.NET中,前面那个path能够识别我上面所说的5种格式的URL?
在ASP.NET管线的处理器映射阶段,ASP.NET会将【*Ajax*/*.cspx,*Ajax*.*.cspx】转换成下面的正则表达式,再来检查每个请求的URL是否匹配。

(?:\A|(?<=/))[^/]*Ajax[^/]*/[^/]*\.cspx\z|(?:\A|(?<=/))[^/]*Ajax[^/]*\.[^/]*\.cspx\z

有兴趣的话,您也可以检验一下,这个正则表达式与前面的URL都能匹配。
从这里也可以看出ASP.NET对处理器的映射实现,是可以支持比较复杂的URL模式的。
关于处理器的映射过程可以参考我的博客【细说 HttpHandler 的映射过程】

前面解释了我为什么最终选择【.cspx】来向IIS注册处理器了。
在注册时,还有二个参数也比较重要:
1. 可执行文件:其实就是一个实现了ISAPI的模块,IIS会将匹配的请求交给它,然后由它再交给ASP.NET。这个参数的路径比较长,我们根本不需要记住它,只需要找个已有配置中,将它COPY出来就可以了。
2. 确认文件是否存在:这个参数一定不要选择。因为我们请求的URL并没有对应的文件存在。

这里要补充一点:
我以前发布的FishWebLib DEMO中,使用了【cc】这样的扩展名,可以按照上面的方法注册。
但我还使用了【cs】和【ascx】这二个扩展名。由于这二个扩展名的注册已经存在了,所以,我需要修改它们的配置:双击配置项,确保不要勾选【确认文件是否存在】即可。

IIS6 无扩展名的映射

让我们再回到前面已配置好的示例中,此时页面的显示应该是这个样子的:

点击一下页面上的链接【/mvc/Customers】试试。

不要以为我是在故意设置陷阱哦。我在设计示例程序时,根本也没想到会这样。

到这里,可能有人会想,在httpHandlers中不是还有个【path="/mvc/*"】没有配置吗?
继续按照前面的方法去配置就能解决问题了。

好吧,我再照着前面的方法再试着注册【path="/mvc/*"】试试,结果如下:

因此,前面的方法对于这类【无扩展名】的URL来说,是无效的。

对于这类无扩展名的URL,在IIS6中可以使用添加【通配符应用程序映射】的方法来解决。
回到【应用程序配置】对话框,点击【插入...】按钮,弹出下面的对话框:

按照图片来设置一下吧。然后,【确定】关闭对话框。此时的设置应该是这样的:

全部点击【确定】关闭所有对话框。

让我们再次回到示例程序,此时可以发现,什么问题都没有了。

再补充一句:如果使用这种方法,前面注册cspx的过程就不需要了。因为此时所有的请求都会交给ASP.NET,而ASP.NET会识别我在web.config中所做的配置。

目录的写入权限

为了方便MyMVC DEMO的部署过程,这次我选择了XML文件做为数据源。写入XML的时机是在ASP.NET被停止运行的时候(Application_End事件中)。

让一个在IIS中运行的网站停止运行的方法就是停止网站所使用的【应用程序池】。
可以在网站属性对话框中找到网站所使用的【应用程序池】:

再切到IIS的【应用程序池】的列表,找到前面那个【应用程序池】,右击鼠标,
从弹出的菜单中点击【属性】菜单,然后在出现的对话框中选择【标识】选项卡:

从这个图片中,我们可以知道网站以哪个Windows帐号在运行。记住这里,后面会用到。

好吧,点击【取消】关闭对话框。

补充一点:要想知道网站以什么帐号运行,还可以查看【Windows任务管理器】,找到w3wp.exe所在进程即可:

回到示例程序中,我们可以随便添加一些数据。
然后,在【应用程序池】列表中,停止网站所使用的应用程序池。再启动它。
重新刷新示例程序的页面。

发现什么了?是不是数据没有保存下来?

如果发现数据没有保存起来,可以继续阅读。

数据不能保存的原因并不是因为代码没有执行,而是因为,网站运行的帐号没有权限写数据文件。
XML是放在网站的App_Data目录中,为了检查网站是否有写入权限,可以在App_Data目录上右击,然后选择【属性】菜单,切换到【安全】选项卡:

经过前面的分析,我们已经知道网站是以【NETWORK SERVICE】帐号运行,然而,在这个目录的安全设置中,并没有允许【NETWORK SERVICE】帐号能有写入权限,所以,网站在停止运行时,是由于没有权限才导致不能保存数据的。

此时,我们可以赋予【NETWORK SERVICE】帐号对App_Data目录有写入权限。设置如下图:

好了,您可以再去重启网站所在的【应用程序池】,会发现现在数据能正常保存了。

SQL SERVER的配置

在FishWebLib DEMO中,我为了演示我的通用数据访问层而引入了SQL SERVER,因此,示例程序需要SQL SERVER的支持。

首先,还是回到web.config,来看一下示例程序需要访问什么样的数据库:

注意:示例程序需要连接的SQL SERVER服务器是:localhost\sqlexpress

我的机器上安装了三个SQL SERVER的实例:

因此,我需要以【命名实例】的方式来访问。
如果您的机器将SQL SERVER做为【默认实例】来安装,则需要修改为:localhost

在示例的压缩包中,我提供了SQL SERVER所需的数据文件:db\MyNorthwind.mdf
在运行示例前,我需要将它【附加】到SQL SERVER中。

现在需要先启动 SQL Server Management Studio ,连接SQL SERVER的实例后,
在【对象资源管理器】的树型控件中,找到【数据库】节点,右击,然后点击【附加...】菜单,
在出现的对话框中,点击【添加...】按钮,选择MyNorthwind.mdf文件,然后点击【确定】按钮。

我这边出错了。

再仔细地看一下,发现是日志文件没有找到造成的。
是的,我并没将日志文件也放在压缩包中。
好吧,在对话框中删除日志文件就可以了,再次【确定】。

还是出错:

注意了:这次的错误与前面的错误并不一样。这次是说没有目录的写入权限。

当遇到没有目录的访问权限时,我们首先要知道程序是以什么帐号在运行。
这是非常重要的。要不然,如何配置目录的访问权限呢?

判断程序以什么帐号运行最简单方法就是:打开【Windows任务管理器】,然后去找进程。
这个方法可参考前面的过程。最终我们可以发现sqlserver.exe是以【NETWORK SERVICE】帐号在运行(我的机器是这样)。
好吧,再按照前面设置App_Data目录权限的方法再设置MyNorthwind.mdf文件所在目录的访问权限。

再次尝试【附加】数据库,将能成功完成。
在我机器上,现在已经可以运行示例程序了。

说明:如果由于种种原因,不使用【Integrated Security=SSPI】的连接认证方式,还可以使用【用户名/密码】的方式,那就需要修改web.config中的连接字符串了。

小结:
1. 由于SQL SERVER的数据文件保存在Windows操作系统中,因此必须授予运行SQL SERVER进程的帐号所必需的目录访问权限。
2. 连接到SQL SERVER时,也可能会因为SQL SERVER验证连接身份而失败,那么也必须配置需要的访问权限。

到此为止,示例所需的IIS配置以及SQL SERVER的配置都介绍完了。

在IIS7中部署ASP.NET程序

前面介绍了如何在IIS6中部署一个ASP.NET网站,现来看一下在IIS7.5中如何完成这个过程。
接下来的演示将以Windows 7的IIS7.5为准。

IIS7.5相对于IIS6的改进,给我的感觉是:部署ASP.NET网站简直太容易了。

IIS7为了兼容老版本,它支持二种模式来运行ASP.NET程序:集成模式,经典模式。
所谓的经典模式,其实就是为了兼容IIS6的模式。下文将着重介绍集成模式,这样才能体现IIS改进的优势。

在IIS6中,我们需要配置扩展名的映射或者通配符映射,将请求交给一个ISAPI筛选器,然后由它再交给ASP.NET,最终由ASP.NET再将请求交给我们的httpHandlers, httpModules。我们在web.config中配置的httpHandlers, httpModules,对于IIS6来说是不可见的,所以,只能再次到IIS中配置。

从IIS7开始,IIS支持以一种称为【集成模式】的方式运行ASP.NET程序,此时,IIS能直接将请求交给ASP.NET的httpHandlers和httpModules,而且还可以直接从web.config中直接读取配置,因此,只要我们把web.config准备好,配置任务就非常简单了。

由于这个缘故,我在后来提供的示例中,在web.config中已增加对IIS7的支持。
以下就是二个示例项目所需的IIS7的配置部分。

FishWebLib DEMO只需要下面的配置就可以了:

MyMVC DEMO所需的配置如下:

以上这些配置会反映在IIS7.5的哪些地方看到呢?
请看下图:

在这个【处理器映射】列表中,前三个不正是我在web.config中的配置嘛。

前面还有一块fileExtensions的配置又是做什么的呢?
请看下图:

对于FishWebLib DEMO来说,它使用了 cs, ascx 这样的扩展名,而且这二个扩展名按照默认的配置是禁止访问的,所以在那个示例中,这段配置的用途是将这二个扩展名变成允许访问。

我在使用Windows7的IIS7.5时,还发现一个与IIS6不同的地方,它会默认为每个网站创建一个独立的应用程序池,而且运行帐号也不是NETWORK SERVICE,不过,我们可以容易地在【应用程序池】的属性中去修改它。

小结:
在IIS7.5中部署ASP.NET网站是件容易的事,前提是:事先准备好web.config中的system.webServer配置节。
然后只需要创建在IIS中创建一个网站,并指向程序目录即可。
注意:如果程序需要访问本地文件或者数据库,那么还需要设置文件系统或者数据库的访问权限,具体可参考前面相关小节。

80端口和域名

在前面的演示中,为了简单,选择了25678这个端口,那是因为80端口已被使用。这样做实际上不影响网站的运行,不过,URL看起来就不美观了。通常HTTP默认是使用80端口,如果使用这个端口,那么URL中就不会出现端口号了。为了让URL地址看起来更美观,按下来我将演示如何使用80端口。

在IIS中,为了能让一个网站程序运行在80号端口中,有2个办法:
1. 为网站程序使用其它的IP地址的80端口。
2. 为网站指定域名绑定。

我们可以在网卡的配置中新增一个IP地址(如果已经有多个IP就不用这样做了):

然后在IIS中,为网站设置【绑定】,使用这个IP地址了。请参考下图:

除了使用新IP地址的方式外,我们还可以使用域名的方式让网站可以在80端口下面运行。
方法还是在IIS中设置网站的【绑定】操作,给网站指定一个域名即可:

最终的设置应该是下面这个样子的:

此时我们就可以使用下面二种方式来访问我的示例网站了:
http://192.168.0.222
http://www.mymvc-demo.com

不过这里又有个新问题:域名从哪里来?

答案有二个(对于演示来说):
1. 修改 C:\Windows\System32\drivers\etc\hosts 文件,
  增加一个映射条目:127.0.0.1 www.mymvc-demo.com 即可。
2. 如果您使用的是Windows Server的操作系统,也可以自己给自己分配域名,请继续阅读。

在Windows Server的操作系统中,我们可以使用DNS服务创建自己的域名,大致的过程是:
1. 创建一个反向查找区域。
2. 创建一个正向查找区域。
3. 在正向查找区域新建一个WWW的主机。
4. 在IIS中为网站设置绑定,指向新的域名。
5. 设置网卡的DNS服务器地址,指向有DNS服务的机器。
这种方式或许对于单台机器来说,比直接修改host文件要麻烦,但如果是在局域网内部使用将会非常方便。

DNS配置的相关过程如下:(向导中没有贴图的步骤可以直接确定)

现在我们就可以使用域名的方式来浏览我的示例了:


参考:http://www.cnblogs.com/fish-li/archive/2012/02/26/2368989.html#_labelStart



TensorFlow_PyTorch实战:构建AI人工智能回归模型 回归分析是机器学习的核心任务之一,用于预测连续型目标变量(如房价、股票价格、用户留存时间等)。基础线性回归模型的数学原理与代码实现多项式回归模型的过拟合处理与正则化技巧自定义数据集加载与数据预处理流程动态图(PyTorch)与静态图(TensorFlow)的编程范式对比模型评估指标与可视化分析方法核心概念:对比两大框架的架构设计,解析回归模型核心组件数学原理:推导线性回归的假设函数、损失函数及优化算法算法实现:提供TensorFlow和PyTorch的完整代码示例项目实战。 阅读详情

相关推荐

MCSDK5.4.8电机库双电阻采样适配:从扇区判断到固定采样的重构实践

本文详细解析了MCSDK5.4.8电机库中双电阻采样技术的重构实践,从扇区判断到固定采样的关键步骤。通过硬件配置优化、核心文件重构及电流读取函数改造,实现高效稳定的电机控制,特别适用于成本敏感型项目。文章还提供了占空比限制计算、参数调整及常见问题排查等实用技巧,助力工程师快速掌握两电阻采样方法。

weixin_42532938的博客 282

IIS搭建ASP站点

首先打开控制面板 ->选中添加或删除->添加删除组件->应用程序服务器->详细信息->INIT信息服务->详细信息->万维网服务->详细信息->勾选前四个和最后一个->确定。搭建方法同上,选择IP的时候选新的IP地址,端口同01一致为81,搭建完成可以正常访问。搭建完网站要更改权限 - 右键权限 - user 勾上写入 可以正常的访问登录了。右键权限---高级--添加--高级--查找位置---找到IUSR--应用即可。网站->新建->网站->下一步->01->81端口->选择路径->选择权限。

2301_79194110的博客 2286

01. VBA从入门到精通——录制宏、窗口、快捷键

excel表功能区右击→常用→选择显示开发工具选项→确定Visual Basic:打开VBA窗口宏:查看要录制的宏录制宏:准备录制宏使用相对引用:录制宏的时候对单元格的引用做一个设置宏安全性:对宏的使用做安全设置,一般设置为禁用所有宏,并发出通知,此时打开带有宏代码的工作薄时会出现警告标记,如果宏可信就选择启动。

weixin_43812198的博客 1697

如何在IIS6,7中部署ASP.NET网站

阅读目录 开始查看web.config文件在IIS中创建网站IIS6 添加扩展名映射IIS6 无扩展名的映射目录的写入权限SQL SERVER的配置在IIS7中部署ASP.NET程序80端口和域名 在我的第一篇博客中,我发布过一个示例项目,主要演示了我的我的AJAX框架和我的通用数据访问层。虽然在当初我认为我已考虑地比较周全了,而且还提供了足够的说明文档,但在发布后的将近一年的时间

Hurry的专栏 4259

网络抓包实战:如何捕获与解析802.1Q VLAN标签报文

在网络通信中,数据包是信息传输的基本单元,而VLAN(虚拟局域网)技术通过在数据链路层插入802.1Q标签,实现了网络流量的逻辑隔离与高效管理。其核心原理是在标准以太网帧头中嵌入4字节的VLAN标识,使交换机能够根据VID(VLAN ID)进行精准转发。掌握VLAN报文的捕获与解析技术,对于网络故障排查、安全审计和性能优化具有重要价值,尤其在需要验证网络隔离策略或诊断Trunk链路异常时。本文聚焦于使用Wireshark工具,结合端口镜像等实操方法,详细演示如何抓取并解读携带802.1Q标签的原始报文,帮助

weixin_33417488的博客 383

科研党必备:5分钟搞定MATLAB闪退问题(含R2020a-R2023b各版本适配)

本文针对科研人员常见的MATLAB闪退问题,提供了从R2020a到R2023b各版本的适配解决方案。通过分析六大诱因和版本定制化修复方法,帮助用户快速诊断和解决闪退问题,包括内存优化、高级调试和预防性维护等实用技巧,确保科研计算的连续性和稳定性。

t1u2v的博客 1970

win11中利用IIS10搭建asp网站

1、按快捷键ctrl+r,在弹出的框中输入"control",打开控制面板。 2、点击【程序】,进入后,在【程序和功能】下点击【启用或关闭Windows功能】 3、在新出现的界面中,保证红色框内的勾选,其他默认。 4、出现以下界面,表示正在修改,最后修改成功。确定关闭窗口即可。 5、点击【此电脑】,再按【管理】。 6、在出现的界面中,分别点击右边的【服务和应用程序】,然后在【服务和应用程序】下面点击【Internet Information Services(IIS) 管理器 】,然后出现如下界

qq_58000413的博客 1万+

1. 基于STM32的1.28寸圆形IPS屏(GC9A01)驱动移植实战:软件SPI与硬件SPI双方案详解

本文详细介绍了如何在STM32平台上为1.28寸圆形IPS屏(GC9A01驱动芯片)移植驱动程序,涵盖软件SPI与硬件SPI两种实现方案。内容从引脚定义、工程搭建、GPIO配置到SPI外设初始化逐步详解,并提供了完整的测试代码,帮助开发者根据项目需求(灵活性或性能)选择合适的通信方式,快速点亮屏幕并集成到智能手表等嵌入式项目中。

weixin_42300144的博客 203

IIS上部署Asp.net core Webapi

本篇文章将为您详细介绍IIS上部署asp.net core webapi的详细过程。

u012119995的博客 6070

Cisco 路由器 打环测试教程

环 回测试是很常用的一种测试,通常用于检查和分析端口或线路问题。如下图所示,我们在设备端口上用命令loopback(某些端口上命令格式为 loopback diagnostic)使接口从内部将自己发送的信号转接到自己的接收端(如红线所示),通过检查数据发送和接收的情况来判断端口工作状态是否正常。如果 需要对端口进行完全的检测,可以使用符合标准的短跳线将端口收发短接构成环...

weixin_34304013的博客 2024

SDR实战(四)-AD9361使用手册(三)

本节定义了并行数据端口和串行外设接口(SPI),它们使得AD9361与基带处理器(BBP)之间能够传输数据和控制/状态信息。图63展示了这些接口,并提供了AD9361和BBP在宽带无线系统中使用方式的高级概述。数据接口以两种模式之一运行:兼容标准CMOS模式或兼容低压差分信号(LVDS)模式。每个接口都具有以下部分描述的独特特性。使用CMOS模式时:保持了单端-CMOS逻辑兼容性。可以使用一个或两个数据端口。使用两个端口可以提高数据吞吐量。

hutx0924的博客 6246

webgis本地部署之在IIS6,7中部署ASP.NET网站

阅读目录 开始查看web.config文件在IIS中创建网站IIS6 添加扩展名映射IIS6 无扩展名的映射目录的写入权限SQL SERVER的配置在IIS7中部署ASP.NET程序80端口和域名 在我的第一篇博客中,我发布过一个示例项目, 主要演示了我的我的AJAX框架和我的通用数据访问层。 虽然在当初我认为我已考虑地比较周全了,而且还提供了足够的说明文档, 但在发布后的

startwithdp的专栏 3070

【Matlab】matlab代码实现迭代学习控制

该文介绍了在Matlab中实现迭代学习控制(ILC)的方法。ILC通过利用历史轨迹数据来优化重复任务的控制性能。文章提供了一个步进电机控制示例,包括:1)定义正弦轨迹;2)设置100次迭代和0.1学习率;3)建立二阶系统模型;4)执行ILC算法计算控制输入;5)绘制期望轨迹与实际输出的对比图。该示例展示了ILC的基本实现过程,并指出实际应用可能需要更复杂的设计。代码演示了误差计算、控制输入更新和结果可视化等关键步骤。

unber的博客 202

在IIS6,7中部署ASP.NET网站[转]

阅读目录 开始 查看web.config文件 在IIS中创建网站 IIS6 添加扩展名映射 IIS6 无扩展名的映射 目录的写入权限 SQL SERVER的配置 在IIS7中部署ASP.NET程序 80端口和域名 在我的第一篇博客中,我发布过一个示例项目, 主要演示了我的我的AJAX框架和我的通用数据访问层。 虽然在当初我认为我已考虑地比较周全了,而且还提供...

weixin_30797199的博客 119

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

如何在IIS6,7中部署ASP.NET网站(转)

在我的第一篇博客中,我发布过一个示例项目, 主要演示了我的我的AJAX框架和我的通用数据访问层。 虽然在当初我认为我已考虑地比较周全了,而且还提供了足够的说明文档, 但在发布后的将近一年的时间里,还是有不少人给我发邮件,问我一些关于不能运行示例的问题。 在所有问题中,主要集中在IIS和SQL SERVER的配置方面。 因此,我认为还是有必要再来谈一下在IIS6/7以及SQL SERVER中部署AS

jsjjob_com的专栏 768

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

在IIS6,7中部署ASP.NET网站

查看web.config文件 ASP.NET网站与一般的桌面程序不同,不是拷贝过来就能运行的(数据库连接除外)。 要想运行它,通常需要一些配置过程。但是,我们到底需要配置什么呢?答案是:查看web.config web.config通常会放在网站的根目录,这个文件中包含了一最重要的网站运行参数。比如: connectionStrings,httpHandlers,httpModules ,这些...

weixin_30342209的博客 135

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

上一篇: 在 Visual Studio 2012 中创建 ASP.Net Web Service
下一篇: 菜鸟玩云计算之六:Ubuntu Server 12.10 上安装 nodejs, zeromq
dreamjava9213
博客等级 码龄16年 7粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值