赞助广告

 

年份

最新评论

评论 RSS

WCF中Server.MapPath错误解决办法

clock 一月 22, 2017 23:50 by author alex
在WCF调用Server.MapPath会出错,解决办法是用System.Web.Hosting.HostingEnvironment.MapPath("~")代替。注意当年目录要加~符号,表示应用程序根目录

EF6 MySQL 使用方法

clock 一月 22, 2017 21:18 by author alex
1.安装mysql-connector-net-6.9.9.msi和mysql-for-visualstudio-1.2.6.msi 引用MySql.Data.dll和MySql.Data.Entity.EF6.dll 2.更新EF6.0   Install-Package EntityFramework -Version 6.1.2  3.web.config中provider节点加入 <provider invariantName="MySql.Data.MySqlClient"               type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" /> 4.configuration节点加入(防止冲突) <system.data>     <DbProviderFactories>       <clear/>       <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />     </DbProviderFactories>   </system.data>

IIS6应用程序池的配置和优化

clock 十一月 2, 2016 12:26 by author alex
IIS 6的核心在于工作进程隔离模式,而应用程序池则是定义工作进程如何进行工作,因此,可以说应用程序池是整个IIS 6的核心。 和IIS 5中只能使用单个应用程序池不同,工作在工作进程隔离模式的IIS 6可以创建多个应用程序池,不同的应用程序池之间是完全隔离的,某个应用程序池停止服务时不会影响到其他应用程序池。 在使用应用程序池之前,你应该确定你所需要的应用程序池数量。可能有很多朋友会认为,既然不同的应用程序池之间是完全隔离的,那么我只需要为每个Web站点创建一个应用程序池就可以了。这个办法在IIS服务器上具有较少的Web站点数量时可以使用,但是如果IIS服务器上具有很多Web站点数量,那么这个办法就不适用了,因为不同的应用程序池在被访问时都会创建各自的工作进程,当大量的工作进程并发工作时会消耗大量的系统资源和CPU利用率,反而会降低服务器性能。你应该根据Web站点的重要性、隔离性、所运行代码的安全性和稳定性等来对IIS服务器上所具有的Web站点进行划分,然后根据情况来决定所需要的应用程序池数量。对于那些非常重要的Web站点、需要单独隔离的Web站点、所运行代码稳定性和安全性并不可靠的Web站点配置为使用各自独立的应用程序池,而将其他普通的Web站点配置为使用一个公共的应用程序池。 默认情况下,在安装IIS时会创建一个默认网站并创建一个名为DefaultAppPool的应用程序池为其使用;默认配置下的应用程序池已经可以很好的进行工作,建议你只有在特别需要时才对应用程序池进行配置。 配置应用程序池属性 在IIS管理控制台中展开应用程序池文件夹,然后右击对应的应用程序池,点击属性,你可以在应用程序池的属性中进行以下配置: 回收 在回收标签,你可以设置工作进程的回收方式:   回收工作进程(分钟):在工作进程运行多少分钟后回收工作进程,默认启用,并且设置为1740分钟(29小时); 回收工作进程(请求数目):在工作进程处理多少 个HTTP请求后终止此工作进程,默认禁用,如果启用则默认值为35000; 在下列时间回收工作进程:在指定的时间回收工作进程,默认禁用;如需启用,勾选后点击添加按钮添加回收的时间即可,使用24小时制定义回收的时间; 消耗太多内存时回收工作进程: 最大虚拟内存(兆):当工作进程使用的虚拟内存达到设置的值时回收工作进程,默认禁用,如果启用则默认值为500 M;建议设置为不超过虚拟内存总数的70%; 最大使用的内存(兆):当工作进程使用的物理内存达到设置的值时回收工作进程,默认禁用,如果启用则默认值为192 M;建议设置为不超过物理内存总数的60%; 另外需要注意的是,应用程序池具有以下两种工作进程回收方式,不过这两种回收方式均不会造成Web服务的中断: 默认情况下,应用程序池使用重叠回收方式。在这种方式下,当应用程序池要关闭某个工作进程时,会先创建一个工作进程,直到新的工作进程成功创建后才关闭旧的工作进程; 应用程序池也可以先关闭旧的工作进程,然后再创建新的工作进程。 如果Web应用程序不支持多实例运行,那么你必须配置应用程序池禁止使用重叠回收方式。此配置无法在IIS管理控制台中进行修改,只能通过在metabase.xml中修改对应应用程序池的DisallowOverlappingRotation metabase属性为true进行。 性能 在性能标签你可以设置工作进程的运行方式: 在空闲此段时间后关闭工作进程(分钟):当工作进程空闲多少分钟后关闭此工作进程,这降低了空闲工作进程对系统资源和CPU性能的消耗,默认启用并且设置为20分钟; 核心请求队列限制为(请求次数):当HTTP.sys接收到某个客户端发送的HTTP请求时,如果处理此请求的对应应用程序池的工作进程还处于忙状态,则HTTP.sys将接收到的请求保存在对应应用程序池的请求队列中,直到工作进程空闲为止。此选项即用于设置此应用程序池的请求队列所能容纳的请求数量,默认情况下每个应用程序池的请求队列限制为保留1000个请求,如果超出则向客户端返回503错误,你可以根据需要适当进行修改,最大可以设置为65535。但是如果设置太大则会消耗大量的系统资源 ,而设置太小会导致客户端访问时频繁出现503错误。 启用CPU监视:监视此应用程序池的CPU使用率,默认未启用;如果某个应用程序池占用的CPU利用率过多,那么可以通过配置此选项来限制此应用程序池; 最大CPU使用率(百分比):所设置的应用程序池所能使用的最大CPU使用率;启用CPU监视时默认值为100; 刷新CPU使用率(分钟):刷新CPU使用率的间隔时间;启用CPU监视时默认值为5; CPU使用率超过最大使用率时执行的操作:当此应用程序池的CPU使用率超过所设置的最大CPU使用率时所进行的操作,启用CPU监视时默认为无,此时IIS只是在事件日志中进行记录而不进行其他操作;如果选择为关闭,那么IIS将关闭此应用程序池中的所有工作进程; Web园:在Web园中你可以配置此应用程序池所使用的最大工作进程数,默认为1,最大可以设置为4000000; 配置使用多个工作进程可以提高该应用程序池处理请求的性能,但是在设置为使用多个工作进程之前,请考虑以下两点: 每一个工作进程都会消耗系统资源和CPU占用率;太多的工作进程会导致系统资源和CPU利用率的急剧消耗; 每一个工作进程都具有自己的状态数据,如果Web应用程序依赖于工作进程保存状态数据,那么可能不支持使用多个工作进程。 运行状况 在运行状况标签你可以配置应用程序池监视工作进程的运行状况, 启用Ping:默认情况下应用程序池配置为每隔30秒Ping工作进程,当工作进程没有进行响应时,则认为此工作进程出现故障并默认配置为关闭此工作进程。你可以修改Ping的时间间隔,但是太长的Ping间隔可能会导致Web服务的中断,而太短的Ping间隔又会消耗更多的系统资源和CPU利用率,因此建议你保留默认配置; 启用快速失败保护:如果Web应用程序代码编写有问题,它可能会导致工作进程持续出现问题。默认情况下应用程序池配置为启用快速失败保护,当工作进程在配置的时间段(默认为5分钟)内发生的失败次数超过了配置的值(默认为5次),则禁用此应用程序池。 启动时间限制:IIS等待属于此应用程序池的工作进程启动的时间,当工作进程启用时间超出此设置值时,IIS会在事件日志中进行记录; 关闭时间限制:当IIS检测到某个工作进程出现故障时,将此工作进程标记为关闭,此选项指定了IIS等待工作进程自动关闭的时间限制,如果超出此时间限制后工作进程尚未关闭,则IIS强行关闭工作进程。 标识 在标识标签,你可以配置工作进程所运行的用户账户。在IIS 5或者当IIS 6运行在IIS 5隔离模式时,工作进程运行在本地系统账户,而运行在工作进程隔离模式下的IIS 6的工作进程运行在网络服务账户下,这降低了系统被攻击的可能性。 你可以配置工作进程运行在预定义的本地系统、本地服务或网络服务账户下,也可以配置为使用某个自定义的用户账户。建议使用默认的网络服务账户;不过如果为了更高的安全性,可以配置使用自定义的用户账户,不过建议你只是将此自定义用户加入到IIS_WPG用户组中,因此IIS_WPG用户组包含了可以启动和运行工作进程的最小权限。 创建应用程序池 要新建应用程序池,在IIS管理控制台中右击应用程序池文件夹,指向新建,选择应用程序池; 然后在弹出的添加新应用程序池对话框,在应用程序池ID栏输入应用程序池名,然后选择使用默认设置还是继承现有的应用程序池设置,再点击确定即可; 分配Web站点到应用程序池中 在IIS管理控制台中展开网站文件夹,右击对应的网站,然后选择属性,在弹出的网站属性对话框上,点击主目录标签,然后在应用程序池栏选择不同的应用程序池即可,默认情况下所有网站所使用的应用程序均名为默认应用程序,如果要想此网站使用不同的应用程序名,则在应用程序名栏修改即可,例如在此我就修改为winsvr,这主要是便于查看,然后点击确定即可, 此时,在对应的应用程序池下就显示出了对应网站的应用程序,如下图所示:

C# 读取IE缓存文件夹中的文件

clock 八月 15, 2016 23:35 by author alex
在我们访问一个网站的时候。系统会把这个网站上的图片,动画等内容全部缓存到Internet临时文件夹中。 我们可以通过 <Drives>:\Documents and Settings\<user>\Local Settings\Temporary Internet Files访问。但是可能我们都没有想到,里面的文件实际却不同于我们系统中其他的文件夹和文件的关系。  举例说明,我们在VS.net下写一个函数来返回指定文件夹中的文件夹和所有文件时,但我们把Internet临时文件夹的地址传进去时,系统只会返回一个文件,那就是desktop.ini(每个文件夹都有),还有一个隐藏的文件夹。所以这就证明了在临时文件夹中的文件并不是按照普通的文件夹与文件的方式存在的。  其实windows是把临时文件全部存在一个隐藏的文件夹中,这个文件夹是我们都看不到的,然后靠一个index.dat的索引把内容全部读出来回显给用户。  那我们怎么用程序来读取其中的内容呢?   首先要引用一个user.dll,在系统文件夹中。然后利用它其中的一些函数就可以遍历整个文件夹,并获得其中每个文件的信息。 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->[DllImport("wininet.dll", SetLastError=true, CharSet=CharSet.Auto)] public static extern IntPtr FindFirstUrlCacheEntry( [MarshalAs(UnmanagedType.LPTStr)] string lpszUrlSearchPattern, IntPtr lpFirstCacheEntryInfo, ref int lpdwFirstCacheEntryInfoBufferSize); [DllImport("wininet.dll", SetLastError=true, CharSet=CharSet.Auto)] public static extern bool FindNextUrlCacheEntry( IntPtr hEnumHandle, IntPtr lpNextCacheEntryInfo, ref int lpdwNextCacheEntryInfoBufferSize); [DllImport("wininet.dll")] public static extern bool FindCloseUrlCache( IntPtr hEnumHandle); 引入以上三个函数来遍历临时文件夹,然后再引用 [DllImport("kernel32.dll",SetLastError=true, CharSet=CharSet.Auto)] public static extern int FileTimeToSystemTime( IntPtr lpFileTime, IntPtr lpSystemTime); 用来把 FileTime时间格式转化成c#中的string类型,以便我们进一步操作。 主体程序如下: #region 引入dll [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)] public struct INTERNET_CACHE_ENTRY_INFO { public int dwStructSize; public IntPtr lpszSourceUrlName; public IntPtr lpszLocalFileName; public int CacheEntryType; public int dwUseCount; public int dwHitRate; public int dwSizeLow; public int dwSizeHigh; public FILETIME LastModifiedTime; public FILETIME ExpireTime; public FILETIME LastAccessTime; public FILETIME LastSyncTime; public IntPtr lpHeaderInfo; public int dwHeaderInfoSize; public IntPtr lpszFileExtension; public int dwExemptDelta; } [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)] public struct SYSTEMTIME { public short wYear; public short wMonth; public short wDayOfWeek; public short wDay; public short wHour; public short wMinute; public short wSecond; public short wMilliseconds; } [DllImport("kernel32.dll",SetLastError=true, CharSet=CharSet.Auto)] public static extern int FileTimeToSystemTime( IntPtr lpFileTime, IntPtr lpSystemTime); [DllImport("wininet.dll", SetLastError=true, CharSet=CharSet.Auto)] public static extern IntPtr FindFirstUrlCacheEntry( [MarshalAs(UnmanagedType.LPTStr)] string lpszUrlSearchPattern, IntPtr lpFirstCacheEntryInfo, ref int lpdwFirstCacheEntryInfoBufferSize); [DllImport("wininet.dll", SetLastError=true, CharSet=CharSet.Auto)] public static extern bool FindNextUrlCacheEntry( IntPtr hEnumHandle, IntPtr lpNextCacheEntryInfo, ref int lpdwNextCacheEntryInfoBufferSize); [DllImport("wininet.dll")] public static extern bool FindCloseUrlCache( IntPtr hEnumHandle); const int ERROR_NO_MORE_ITEMS = 259; #endregion #region FileTimeToSystemTime private string FILETIMEtoDataTime(FILETIME time) { IntPtr filetime = Marshal.AllocHGlobal( Marshal.SizeOf(typeof(FILETIME)) ); IntPtr systime = Marshal.AllocHGlobal( Marshal.SizeOf(typeof(SYSTEMTIME)) ); Marshal.StructureToPtr(time,filetime,true); FileTimeToSystemTime( filetime ,systime); SYSTEMTIME st = (SYSTEMTIME) Marshal.PtrToStructure(systime,typeof(SYSTEMTIME)); string Time = st.wYear.ToString()+"."+st.wMonth.ToString()+"."+st.wDay.ToString()+"."+st.wHour.ToString()+"."+st.wMinute.ToString()+"."+st.wSecond.ToString(); return Time; } #endregion #region 加载数据 private void FileOk_Click(object sender, System.EventArgs e) { int nNeeded = 0, nBufSize; IntPtr buf; INTERNET_CACHE_ENTRY_INFO CacheItem; IntPtr hEnum; bool r; FindFirstUrlCacheEntry( null, IntPtr.Zero, ref nNeeded ); if ( Marshal.GetLastWin32Error() == ERROR_NO_MORE_ITEMS ) return; nBufSize = nNeeded; buf = Marshal.AllocHGlobal( nBufSize ); hEnum = FindFirstUrlCacheEntry( null, buf, ref nNeeded ); while ( true ) { CacheItem = (INTERNET_CACHE_ENTRY_INFO) Marshal.PtrToStructure( buf, typeof(INTERNET_CACHE_ENTRY_INFO) ); string modifiedTime = FILETIMEtoDataTime(CacheItem.LastModifiedTime); string expireTime = FILETIMEtoDataTime(CacheItem.ExpireTime); string accessTime = FILETIMEtoDataTime(CacheItem.LastAccessTime); string syncTime = FILETIMEtoDataTime(CacheItem.LastSyncTime); #region 获得数据,存入数据库 try { //此處遍歷CacheItem即可 //例如 string s = Marshal.PtrToStringAuto(CacheItem.lpszSourceUrlName); 可以获取CacheItem的本地文件路径 这里如何把文件拷贝到另外一个文件夹中去,普通的文件拷贝好像不行 } catch { //異常處理 } #endregion string s = Marshal.PtrToStringAuto(CacheItem.lpszSourceUrlName); nNeeded = nBufSize; r = FindNextUrlCacheEntry( hEnum, buf, ref nNeeded ); if ( !r && Marshal.GetLastWin32Error() == ERROR_NO_MORE_ITEMS ) break; if ( !r && nNeeded > nBufSize ) { nBufSize = nNeeded; buf = Marshal.ReAllocHGlobal( buf, (IntPtr) nBufSize ); FindNextUrlCacheEntry( hEnum, buf, ref nNeeded ); } } MessageBox.Show("系统数据加载完毕!"); Marshal.FreeHGlobal( buf ); } #endregion

避免 TCP/IP 端口耗尽真正解决通常每个套接字地址只允许使用一次

clock 七月 23, 2016 05:23 by author alex
启动注册表编辑器:开始->运行->输入regedit 在注册表中,浏览到并单击以下注册表项。 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 在“编辑”菜单中单击“新建”、“DWORD 值”,然后添加以下注册表值,以增加可以动态分配到客户端的临时端口的数量 值名称MaxUserPort 值数据<在此输入一个 5000 到 65534 之间的十进制值> 关闭注册表编辑器。必须重新启动计算机,此更改才会生效。 降低客户端 TCP/IP 套接字连接的超时值(默认值为 240 秒) 启动注册表编辑器。 在注册表中,浏览到并单击以下注册表项。 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 在“编辑”菜单中单击“新建”、“DWORD 值”,然后添加以下注册表值,以缩短关闭连接时,该连接处于 TIME_WAIT 状态的时间。当连接处于 TIME_WAIT 状态时,套接字对无法重新使用: 值名称TcpTimedWaitDelay 值数据<在此输入一个 30 到 240 之间的十进制值。> 关闭注册表编辑器。

Windows Server 2003 使用WebClient获取https页面内容报The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel错误的解决办法

clock 六月 28, 2016 23:29 by author alex
WebClient webClient = new WebClient(); 在DownloadString方法之前加入 //获取或设置用于验证服务器证书的回调  ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };   string result = webClient.DownloadString(url);

DateTime时间格式转换为Unix时间戳格式

clock 五月 20, 2016 19:48 by author alex
/// <summary> /// 时间戳转为C#格式时间 /// </summary> /// <param name="timeStamp">Unix时间戳格式</param> /// <returns>C#格式时间</returns> public static DateTime GetTime(string timeStamp) { DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); long lTime = long.Parse(timeStamp + "0000000"); TimeSpan toNow = new TimeSpan(lTime); return dtStart.Add(toNow); } /// <summary> /// DateTime时间格式转换为Unix时间戳格式 /// </summary> /// <param name="time"> DateTime时间格式</param> /// <returns>Unix时间戳格式</returns> public static int ConvertDateTimeInt(System.DateTime time) { System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); return (int)(time - startTime).TotalSeconds; }

Linux下如何进行FTP设置

clock 十月 24, 2015 03:33 by author alex
目录: 一、Redhat/CentOS安装vsftp软件 二、Ubuntu/Debian安装vsftp软件 一、Redhat/CentOS安装vsftp软件 1.更新yum源 首先需要更新系统的yum源,便捷工具下载地址:http://help.aliyun.com/manual?spm=0.0.0.0.zJ3dBU&helpId=1692 2.安装vsftp 使用yum命令安装vsftp #yum install vsftpd -y 3.添加ftp帐号和目录 先检查一下nologin的位置,通常在/usr/sbin/nologin或者/sbin/nologin下。 使用下面的命令创建帐户,该命令指定了/alidata/www/wwwroot为用户pwftp的家目录,您可以自己定义帐户名和目录: #useradd -d /alidata/www/wwwroot -s /sbin/nologin pwftp 修改该帐户密码: #passwd pwftp 修改指定目录的权限 #chown -R pwftp.pwftp /alidata/www/wwwroot 4.配置vsftp 编辑vsftp配置文件,命令如下: #vi /etc/vsftpd/vsftpd.conf 将配置文件中”anonymous_enable=YES “改为 “anonymous_enable=NO” 取消如下配置前的注释符号: local_enable=YES write_enable=YES chroot_local_user=YES 保存修改,按ESC键,输入:wq 5.修改shell配置 vi编辑/etc/shells,如果该文件里没有/usr/sbin/nologin或者/sbin/nologin(具体看当前系统配置)则追加进去 6.启动vsftp服务并测试登录 使用命令启动vsftp服务: #service vsftpd start 然后用帐号pwftp测试下是否可以登陆ftp。目录是/alidata/www/wwwroot。 二、Ubuntu/Debian安装vsftp软件 1.更新软件源 首先需要更新系统的软件源,便捷工具下载地址:http://help.aliyun.com/manual?spm=0.0.0.0.zJ3dBU&helpId=1692 2.安装vsftp 使用apt-get命令安装vsftp #apt-get install vsftpd -y 3.添加ftp帐号和目录 先检查一下nologin的位置,通常在/usr/sbin/nologin或者/sbin/nologin下。 使用下面的命令创建帐户,该命令指定了/alidata/www/wwwroot为用户pwftp的家目录,您可以自己定义帐户名和目录: #useradd -d /alidata/www/wwwroot -s /sbin/nologin pwftp 修改该帐户密码: #passwd pwftp 修改指定目录的权限 #chown -R pwftp.pwftp /alidata/www/wwwroot 4.配置vsftp 编辑vsftp配置文件,命令如下: #vi /etc/vsftpd.conf 将配置文件中”anonymous_enable=YES “改为 “anonymous_enable=NO” 取消如下配置前的注释符号: local_enable=YES write_enable=YES chroot_local_user=YES chroot_list_enable=YES chroot_list_file=/etc/vsftpd.chroot_list 保存退出 编辑/etc/vsftpd.chroot_list文件,将ftp的帐户名添加进去,保存退出 5.修改shell配置 vi编辑/etc/shells,如果该文件里没有/usr/sbin/nologin或者/sbin/nologin(具体看当前系统配置)则追加进去 6.重启vsftp服务并测试登录 使用命令启动vsftp服务: #service vsftpd restart 然后用帐号pwftp测试下是否可以登陆ftp。目录是/alidata/www/wwwroot

CIL操作表

clock 十月 19, 2015 02:45 by author alex

C#使用NSoup解析HTML的乱码解决

clock 二月 5, 2015 02:51 by author alex
NSoup是JSoup的Net移植版本。使用方法基本一致。 如果项目涉及HTML的处理,强烈推荐NSoup,毕竟字符串截断太苦逼了。 下载地址: http://nsoup.codeplex.com/ 简单用法如下: NSoup.Nodes.Document doc = NSoup.NSoupClient.Parse(HtmlString); 处理网络上的页面: NSoup.Nodes.Document doc = NSoup.NSoupClient.Connect(http://www.baidu.com/).Get(); 但是遗憾的是NSoup默认的编码是UTF-8,处理中文有乱码(对于编码是UTF-8的自然不会有乱码,但是有些GB2312的就可能有乱码)。 目前我找到两种解决办法: 1.下载网页源代码再处理 WebClient webClient = new WebClient(); String HtmlString=Encoding.GetEncoding("utf-8").GetString(webClient.DownloadData("http://www.baidu.com/")); NSoup.Nodes.Document doc = NSoup.NSoupClient.Parse(HtmlString); 2.获得网页的流 WebRequest webRequest=WebRequest.Create("http://www.baidu.com/"); NSoup.Nodes.Document doc = NSoup.NSoupClient.Parse(webRequest.GetResponse().GetResponseStream(),"utf-8"); 第二种用着比较方便,但是我觉得第一种比较合适,毕竟NSoup是个Html解析类,下载网页代码这种事情本来不应该交给它。

解决:VirtualPath was outside the current application root.

clock 二月 28, 2014 14:38 by author alex
用最新的Visual Studo 2013开发web项目,项目通过虚拟目录偶尔会运行会出现解决:VirtualPath was outside the current application root.错误。 解决办法:关闭浏览器的【浏览器链接】如图。问题完美解决。

手机web——自适应网页设计(html/css控制)

clock 二月 26, 2014 21:32 by author alex
一. 允许网页宽度自动调整: "自适应网页设计"到底是怎么做到的?其实并不难。 首先,在网页代码的头部,加入一行viewport元标签。 <meta name="viewport" content="width=device-width, initial-scale=1" /> viewport是网页默认的宽度和高度,上面这行代码的意思是,网页宽度默认等于屏幕宽度(width=device-width),原始缩放比例(initial-scale=1)为1.0,即网页初始大小占屏幕面积的100%。 对于viewport属性,我是真正在接触移动web开发是才遇到的,一把的ps布局都是固定的960px,1000px这种。 下面三篇文章是对viewport属性详细的解释: Viewport(视区概念)——pc端的理解 Viewport(视区概念)——移动端的应用 viewport ——视区概念(转) 对于老式IE6,7,8浏览器需要js处理,由于主要平台是ios和安卓,所有可以暂时不考虑 二. 不使用绝对宽度 由于网页会根据屏幕宽度调整布局,所以不能使用绝对宽度的布局,也不能使用具有绝对宽度的元素。这一条非常重要。 具体说,CSS代码不能指定像素宽度: width:xxx px; 只能指定百分比宽度: width: xx%; 或者:width:auto; 这里开发是指一个网页不仅能用在ps上,也能同时用于移动端,但是对于webapp这种还是需要单独做一个webapp使用的页面。 对于这个知识点,对于我目前做的项目有用处,主要用于控制限定数据库里读出来的图片宽度。 详见:手机webapp的jquery mobile初次使用心得和解决图片自适应大小问题 三. 相对大小的字体 字体也不能使用绝对大小(px),而只能使用相对大小(em)。 body { font: normal 100% Helvetica, Arial, sans-serif; } 上面的代码指定,字体大小是页面默认大小的100%,即16像素。 h1 { font-size: 1.5em; } 然后,h1的大小是默认大小的1.5倍,即24像素(24/16=1.5)。 small { font-size: 0.875em; } small元素的大小是默认大小的0.875倍,即14像素(14/16=0.875)。   四. 流动布局(fluid grid) "流动布局"的含义是,各个区块的位置都是浮动的,不是固定不变的。 .main { float: right; width: 70%; } .leftBar { float: left; width: 25%; } float的好处是,如果宽度太小,放不下两个元素,后面的元素会自动滚动到前面元素的下方,不会在水平方向overflow(溢出),避免了水平滚动条的出现。 另外,绝对定位(position: absolute)的使用,也要非常小心。 五. "自适应网页设计"的核心,就是CSS3引入的Media Query模块。 它的意思就是,自动探测屏幕宽度,然后加载相应的CSS文件。 <link rel="stylesheet" type="text/css" media="screen and (max-device-width: 400px)" href="tinyScreen.css" /> 上面的代码意思是,如果屏幕宽度小于400像素(max-device-width: 400px),就加载tinyScreen.css文件。 <link rel="stylesheet" type="text/css" media="screen and (min-width: 400px) and (max-device-width: 600px)" href="smallScreen.css" /> 如果屏幕宽度在400像素到600像素之间,则加载smallScreen.css文件。 除了用html标签加载CSS文件,还可以在现有CSS文件中加载。 @import url("tinyScreen.css") screen and (max-device-width: 400px); 六. CSS的@media规则 同一个CSS文件中,也可以根据不同的屏幕分辨率,选择应用不同的CSS规则。 @media screen and (max-device-width: 400px) { .column { float: none; width:auto; } #sidebar { display:none; } } 上面的代码意思是,如果屏幕宽度小于400像素,则column块取消浮动(float:none)、宽度自动调节(width:auto),sidebar块不显示(display:none)。 七. 图片的自适应(fluid image) 除了布局和文本,"自适应网页设计"还必须实现图片的自动缩放。 这只要一行CSS代码: img { max-width: 100%;} 这行代码对于大多数嵌入网页的视频也有效,所以可以写成: img, object { max-width: 100%;} 老版本的IE不支持max-width,所以只好写成: img { width: 100%; } 此外,windows平台缩放图片时,可能出现图像失真现象。这时,可以尝试使用IE的专有命令: img { -ms-interpolation-mode: bicubic; } 或者,Ethan Marcotte的imgSizer.js。 addLoadEvent(function() { var imgs = document.getElementById("content").getElementsByTagName("img"); imgSizer.collate(imgs); }); 不过,有条件的话,最好还是根据不同大小的屏幕,加载不同分辨率的图片。有很多方法可以做到这一条,服务器端和客户端都可以实现。

user-agent(UA)对照表

clock 二月 7, 2014 22:39 by author alex
1. 什么是user-agent?     User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。      浏览器的UA字段标准格式:浏览器标识 (操作系统标识; 加密等级标识; 浏览器语言) 渲染引擎标识 版本信息 。 2. 如何查看user-agent?    方法一:使用抓包工具(比如Wireshark和sniffer)    方法二:推荐3个检测浏览器User-Agent信息的网站 (1) http://whatsmyuseragent.com/ (2) http://whatsmyua.com/ (3)http://www.useragentstring.com/ 3. 浏览器user-agent (1)部分浏览器的user-agent对照表(转自http://www.4wei.cn/archives/1001007) IE   而IE各个版本典型的userAgent如下:   Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)   Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2)   Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)   Mozilla/4.0 (compatible; MSIE 5.0; Windows NT)   其中,版本号是MSIE之后的数字。 Firefox   Firefox几个版本的userAgent大致如下:   Mozilla/5.0 (Windows; U; Windows NT 5.2) Gecko/2008070208 Firefox/3.0.1   Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070309 Firefox/2.0.0.3   Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070803 Firefox/1.5.0.12  其中,版本号是Firefox之后的数字。 Opera   Opera典型的userAgent如下:   Opera/9.27 (Windows NT 5.2; U; zh-cn)   Opera/8.0 (Macintosh; PPC Mac OS X; U; en)   Mozilla/5.0 (Macintosh; PPC Mac OS X; U; en) Opera 8.0    其中,版本号是靠近Opera的数字。 Safari   Safari典型的userAgent如下:   Mozilla/5.0 (Windows; U; Windows NT 5.2) AppleWebKit/525.13 (KHTML, like Gecko) Version/3.1 Safari/525.13   Mozilla/5.0 (iPhone; U; CPU like Mac OS X) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/4A93 Safari/419.3   其版本号是Version之后的数字。 Chrome   目前,Chrome的userAgent是: Mozilla/5.0 (Windows; U; Windows NT 5.2) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13    其中,版本号在Chrome之后的数字。 Navigator 目前,Navigator的userAgent是: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.12) Gecko/20080219 Firefox/2.0.0.12 Navigator/9.0.0.6 其中,版本号在Navigator之后的数字。 以下是常见浏览器的自定义Agent Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0) Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727) Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; 360se) Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; TencentTraveler 4.0; .NET CLR 2.0.50727) 其中,360浏览器是“360se”,腾讯TT浏览器是“TencentTraveler 4.0”,Sogou浏览器是“SE 2.X MetaSr 1.0”,NET框架版本是“.NET CLR 2.0.50727”。 (2)几个移动平台的user-agent Android N1 Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Android QQ浏览器 For android MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Android UC For android JUC (Linux; U; 2.3.7; zh-cn; MB200; 320*480) UCWEB7.9.3.103/139/999 备注: 320*480 是设备的分辨率,可以修改. Android Firefox手机版Fennec Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0a1) Gecko/20110623 Firefox/7.0a1 Fennec/7.0a1 Android Opera Mobile Opera/9.80 (Android 2.3.4; Linux; Opera Mobi/build-1107180945; U; en-GB) Presto/2.8.149 Version/11.10 Android Pad Moto Xoom Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13 iPhone3 Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/1A542a Safari/419.3 iPhone4 Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7 iPad Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10 BlackBerry Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en) AppleWebKit/534.1+ (KHTML, like Gecko) Version/6.0.0.337 Mobile Safari/534.1+ WebOS HP Touchpad Mozilla/5.0 (hp-tablet; Linux; hpwOS/3.0.0; U; en-US) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/233.70 Safari/534.6 TouchPad/1.0 Nokia N97 Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 NokiaN97-1/20.0.019; Profile/MIDP-2.1 Configuration/CLDC-1.1) AppleWebKit/525 (KHTML, like Gecko) BrowserNG/7.1.18124 Windows Phone Mango Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Titan)           Windows Phone Mango的User Agent格式为:Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0;厂商;型号[;运营商]) 4. user-agent并非浏览器所特有的,Spider,Robots,Crawler,扫描器等都有user-agent,具体可以在http://www.user-agents.org/查看详情。 5. 从以上user-agent可以很明显的看出,user-agent泄露了我们的一些信息,还有一些网站常常通过判断 UA 来给不同的操作系统、不同的浏览器发送不同的页面,因此可能造成某些页面无法在某个浏览器中正常显示,但通过伪装 UA 可以绕过检测,这时候就需要修改user-agent来达到我们的目的。 方法一:使用Firefox  扩展User Agent Switcher 修改user-agent,可以直接编辑添加删除;   方法二:chrome也有User Agent Switcher 扩展,和Firfox大同小异,也可以使用chrome自带的开发者工具; (1)打开Chrome浏览器,用组合键 Ctrl+Shift+I 打开开发者工具(或者点击右面扳手图标,选择工具,再选择开发人员工具); (2)单击窗口底部的“Settings”图标; (3)点击Override User Agent 选项,在IE、火狐、iPhone、iPad和Android 2.3的Nexus S中选择其中一个选项,你也可以选择“其他”选项,并输入一个自定义的用户代理。

Ado.net entity framework 连接MySQL中文无法查询的解决办法

clock 一月 20, 2014 12:39 by author alex
新增项目使用的是ADO.NET Entity Framework连接MySQL。本地测试测试通过。上传至godaddy的虚拟主机出现中文字符无法查询的问题。起初还以为是godaddy的MySQL数据库的配置问题。后来才发现只需要在asp.net的数据库连接字符串中加入charset=utf-8即可解决。 server=*******;user id=*******;password=*******;database=*******;charset=utf8

用CSS3的@media属性根据屏幕大小做自适应各种分辨率

clock 一月 4, 2014 16:09 by author alex
如今,电脑显示器的屏幕分辨率向越来越大发展,而手机等移动设备终端的分辨率却不可能大到哪里去。越来越多的网站,开始让自己的页面自适合各种分辨率,在小分辨率下显示基本的内容,在大分辨率下显示全部功能,甚至是分多等级的多版本。比如说我们熟悉的wordpress后台,当屏幕分辨率小于900px的时候,左边的侧栏就会变成收拢状态(@media only screen and (max-width:900px))。 这样的好处:让顾客得到最佳的网页视图;但是依然存在坏处:比如我自己的习惯喜欢在手机上查某些资料,某些网页用手机打开自适应后导致我要找的资料被隐藏了,比较烦躁。结论:请善用这种技术,比如前面wordpress后台的例子,收拢状态的侧栏,依然可以被点击后展开,这就是一个完美的例子。 不管怎么样,作为网站前端开发人员需要知道并且会用这种知识。这篇文章让我们揭开 css 里面 @media 属性的神秘面纱,学习一下是如何实现的。 css2里面的@media @media 属性在CSS2里面已经存在,在这个说明页面我们可以看到在css2里面虽然支持@media属性,但是能实现的功能比较少,一般只用做打印的时候做特殊定义的CSS。 语法: @media sMedia { sRules } 说明: sMedia :  指定设备名称。请参阅附录:设备类型 sRules :  样式表定义 指定样式表规则用于指定的设备类型。请参阅link对象的media属性(特性)。 示例: // 设置显示器用字体尺寸 @media screen { BODY {font-size:12pt; } } // 设置打印机用字体尺寸 @media print { @import "print.css" BODY {font-size:8pt;} } css3里面的@media @media 属性在CSS3里面已经演变成一种 media queries(媒体查询/匹配)了,参见CSS3在线手册-有爱一街版:media queries 详解,在CSS3里面,可以用查询语句来匹配各种类型的屏幕。 语法:@media :<sMedia> { sRules } 取值: <sMedia>: 指定设备名称。请参阅附录:设备类型 {sRules}: 样式表定义。 说明: 判断媒介(对象)类型来实现不同的展现。此特性让CSS可以更精确作用于不同的媒介类型,同一媒介的不同条件(分辨率、色数等等). media_query: [only | not]? <media_type> [ and <expression> ]* expression: ( <media_feature> [: <value>]? ) media_type: all | aural | braille | handheld | print | projection | screen | tty | tv | embossed media_feature: width | min-width | max-width | height | min-height | max-height | device-width | min-device-width | max-device-width | device-height | min-device-height | max-device-height | device-aspect-ratio | min-device-aspect-ratio | max-device-aspect-ratio | color | min-color | max-color | color-index | min-color-index | max-color-index | monochrome | min-monochrome | max-monochrome | resolution | min-resolution | max-resolution | scan | grid 解析 media_query 媒体查询条件。包括了 only not and 这些经常在程序里面出现的逻辑判断。 expression 表达式。媒体特征的匹配与否。 media_type 媒体的种类。包括了很多。 media_feature 媒体的特征。常用的是 min-width max-width 最小最大宽度的判断。 实例 说多了也不好理解,我们最方便从实例中学习怎么运用。下面给出一个页面例子,你可以从这个例子中看出,不同浏览器屏幕宽度、高度下的背景颜色的自动变换: 点击查看演示页面Demo 其中核心的css代码如下: <style type="text/css"> body{background:blue;} /*蓝色 默认颜色只有当下面条件都不匹配的时候,即宽度500px-800px之间+高度100px-400px之间*/ @media screen and (max-width:500px){body{background:green;}} /*宽度小于500px时 绿色*/ @media screen and (min-width:800px){body{background:red;}} /*宽度大于800px时 红色*/ @media screen and (max-height:100px){body{background:yellow;}} /*高度小于100px时 黄色*/ @media screen and (min-height:400px){body{background:pink;}} /*高度大于400px时 粉色*/ </style> 从上面的实例可以看出,要小于的时候用max,要大于的时候用min,逻辑是正好相反的,大家注意一下。 扩展总结 有了媒体匹配查询的CSS3功能之后,你就可以在一个页面上定义多套显示风格了,非常好用方便。 但是低级版本的IE不支持怎么办?谁去管它呢?你有默认的一套风格都支持就好了啊,一般手机上的浏览器都是webkit的内核,这些东西都是兼容的。所以这么好用的一个属性,大家都喜欢用。

解决:Ado.net Entity Framework 5.0 for MySQL报找不到或无法加载已注册的 .Net Framework Data Provider

clock 十二月 28, 2013 01:14 by author alex
RDS是阿里云的关系型数据库,在同等软硬件环境要远优于自建数据库。于是决定将MSSQL迁移到RDS的MySQL(价格实惠)。原来的项目使用了Ado.net Entity Framework 4.0开发环境为Visual Studio 2010,只需安装MySQL Connector/NET即可。下载地址:http://dev.mysql.com/downloads/connector/net/   如果将项目转换成Visual Studio 2012,Ado.net Entity Framework版本变为5.0。需要用MySQL Installer来安装,自带Visual Studio 2012的Ado.net Entity Framework插件。下载地址:http://dev.mysql.com/downloads/windows/installer/ 通过VS2012+Ado.net Entity Framework 5.0生成代码,使用时会报【找不到或无法加载已注册的 .Net Framework Data Provider。】。 解决办法: 1.在web.config的Configuration节点加入 <system.data>     <DbProviderFactories>       <remove invariant="MySql.Data.MySqlClient" />       <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.7.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />     </DbProviderFactories>   </system.data> 2. 修改machine.config:C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\。找到 <DbProviderFactories> 节点加入  <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.7.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> 注意Version版本

C#创建高质量(清晰)缩略图——动态调整大小

clock 十月 26, 2013 10:07 by author alex
创建高质量(清晰)缩略图——动态调整大小 Bitmap类的GetThumbnailImage方法可以从指定的图像文件中生成缩略图,用法非常简单。但是并不总是这样,有时生成的缩略图的质量很差——模糊不清!        为什么会这样?为什么生成的图片是模糊的? 像JPEG这样格式的图像可能把缩略图存在同一个文件中。如果我们使用System.Drawing.Bitmap的GetThumbnailImage方法会检测文件中是否存在缩略图,如果找到该缩略图,它就会返回你所设定的宽高的缩略图版本。如果图像的缩略图的版本比你要求的大小要小,就会发生如下问题:生成的缩略图就会变得模糊,我们知道拉伸一个图像会导致图像质量的下降。 解决方案: 解决方法十分简单!我们利用System.Drawing.Image对象来装载源图像, 把图像缩放到你需要的比例,而又能保持高质量,接着保存就搞定了! 下面教你,一步一步来创建高质量的缩略图: 本例中假定了两个变量: String src="c:/myImages/a.jpg";   //源图像文件的绝对路径 String dest="c:/myImages/a_th.jpg";    //生成的缩略图图像文件的绝对路径 int thumbWidth=132;    //要生成的缩略图的宽度 下面通过ASP .NET C#来演示代码片段: 你应该包含这些名称空间 using System.Drawing; using System.Drawing.Drawing2D System.Drawing.Image image = System.Drawing.Image.FromFile(src); //利用Image对象装载源图像 //接着创建一个System.Drawing.Bitmap对象,并设置你希望的缩略图的宽度和高度。 int srcWidth=image.Width; int srcHeight=image.Height; int thumbHeight=(srcHeight/srcWidth)*thumbWidth; Bitmap bmp = new Bitmap(thumbWidth, thumbHeight); //从Bitmap创建一个System.Drawing.Graphics对象,用来绘制高质量的缩小图。 System.Drawing.Graphics gr = System.Drawing.Graphics.FromImage(bmp); //设置 System.Drawing.Graphics对象的SmoothingMode属性为HighQuality gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; //下面这个也设成高质量 gr.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; //下面这个设成High gr.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; //把原始图像绘制成上面所设置宽高的缩小图 System.Drawing.Rectangle rectDestination = new System.Drawing.Rectangle(0, 0, thumbWidth, thumbHeight); gr.DrawImage(image, rectDestination, 0, 0, srcWidth, srcHeight, GraphicsUnit.Pixel); //保存图像,大功告成! bmp.Save(dest); //最后别忘了释放资源 bmp.Dispose(); image.Dispose();

iReaper可以继续使用了

clock 五月 14, 2013 10:04 by author alex
由于误操作硬盘里的数据全没了。收藏多年的webcast也当然无存。没办法重新下载喽!这时候发现iReaper已经没办法使用了。 前段时间为了查找方便(ireaper以前没有搜索功能)搞了个ireaper for web。但这东西不能批量下载。还好ireaper是开源的。花了点时间看了源码! 三五下搞定——iReaper可以继续使用。下载地址 http://ireaper.xnadevelop.com 注明:我不是作者,但非常喜欢这款软件。所以我修改了该软件的源码(服务端源码也改了),并发布可用版本。各位暂时先用着,同时也希望作者能继续开发这款优秀的软件。

Windows 2003 IIS6.0 php出现Could not find entry for "php" on site解决办法

clock 五月 3, 2013 10:43 by author alex
出现这个原因可能是因为fcgisetup安装不正确造成的!解决办法如下: 1.安装php 2.下载安装fcgisetup_1.5_x86_rtw.msi,网上搜索一下很多下载地址 3.打开C:\WINDOWS\system32\inetsrv\fcgiext.ini 如果【Types】后面无内容添加一下内容。 php=PHP53_via_FastCGI [PHP54_via_FastCGI] ExePath=C:\Program Files\PHP\v5.4\php-cgi.exe InstanceMaxRequests=10000 ActivityTimeout=600 RequestTimeout=600 EnvironmentVars=PHP_FCGI_MAX_REQUESTS:10000,PHPRC:C:\Program Files\PHP\v5.4 [PHP53_via_FastCGI] ExePath=C:\Program Files\PHP\v5.3\php-cgi.exe InstanceMaxRequests=10000 ActivityTimeout=600 RequestTimeout=600 EnvironmentVars=PHP_FCGI_MAX_REQUESTS:10000,PHPRC:C:\Program Files\PHP\v5.3 如果有修改php的安装路径即可。 4.打开IIS6.0 网站属性-主目录 -配置-添加应用程序扩展-可执行文件输入C:\WINDOWS\system32\inetsrv\fcgiext.dll 确定即可。

完美解决:维护计划报“GUID应包含带4个短划线的32位数”错误

clock 四月 25, 2013 10:09 by author alex
MS SQL Server 2005的维护计划自动备份数据库,能创建维护计划,运行时间后,保存就提示“GUID 应包含带 4 个短划线的 32 位数(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)”错误。 两个原因: 一、没有打补丁 Microsoft SQL Server 2005 Service Pack 3:http://www.microsoft.com/downloads/zh-cn/details.aspx?displaylang=zh-cn&FamilyID=ae7387c3-348c-4faa-8ae5-949fdfbe59c4 二、在安装SQL Server 2005时没有安装integration service,添加些组件后就能创建维护任务成功。 根据本人遇到的现状,是能创建维护计划的,只是设置了维护计划的执行时间就提示上述错误。所以就没检查这一项,只是打了补丁。根据以前的经验补充以下一点。 三、SQL Server Agent(MSSQLSERVER)的启动模式设置为“自动” SQL Server Agent 是一个任务规划器和警报管理器,在实际应用和环境下,您可以将那些周期性的活动定义成一个任务,而让其在SQL Server Agent 的帮助下自动运行。当SQL Server Agent 没有启动计划任务也是无法执行的,其启动模式默认为“手动”。

友情链接赞助