最近网上关于Windows7的说明几乎全部都是关于它的新UI来说明的,很少有人提及它内置的IIS7.5,这个与我们很大一部分的ASP.net开发人员相关的组件
。
下面是一篇IIS团队刚刚发布的关于IIS7.5的改进介绍,有兴趣的朋友可以看一下。
http://blogs.iis.net/mailant/archive/2009/01/11/iis7-in-windows-server-2008-r2.aspx
本想翻译一下给园子里的各位朋友的,但发现已经有人先我一步了,就不再做无用功了,下面是一个翻译后的中文连接
http://blogs.msdn.com/cqwang/archive/2009/01/14/iis7-windows-server-2008-r2.aspx
更新列表:
1. 内容发布扩展(FTP, WebDav)集成进Web服务器OS
2. 集成Administration Pack扩展到Windows Server OS
3. 新的IIS7 PowerShell Provider和Commandlet支持
4. 丰富的Server Core应用程序托管
5. 改进的FastCGI支持
6. IIS核心更改
支持配置系统的自定义追踪。
通过配置轮询来审核或追踪配置变更的能力——这是来自托管商们的要求,特别是想要监视客户们更改配置系统。
ASP.NET支持不同的CLR版本(例如,CLR4.0),随着多个CLR版本的使用,这个特性对开发者切换版本很重要。我们也将此功能向后移植到Windows Server 2008 SP2。
Application pools的更好控制,可以为每应用程序池指定CLR设置,可以用新的Application Pool性能计数器监视性能。
可委派自定义错误,这是来自开发者的最多要求,他们想让非管理员在本地或远程改变自定义错误。
IP restriction list的IPv6支持。
Request filtering的更细粒度控制,特别对query strings来帮助防止SQL注入式攻击。Request filtering现在也支持请求特定的规则,使SQL注入规则仅对特定请求适用。
Nego2支持,将允许内置支持LiveID providers,FedSSP,和更小粒的Kerberos/NTLM使能。
支持不要求密码的Managed Service Accounts域账号。
AppPool identity支持
支持application pool预热,大型应用程序会需要"起动"一个应用程序池,这样最初的请求们会有更好的性能。
7.IIS Best Practice Analyzer
posted @
2009-01-19 23:48 Jonathan Wang 阅读(2253) |
评论 (9) |
编辑
下面我们来看看Windows 7中全新设计的任务栏,相对Vista的任务栏设计,Windows 7主要做了如下的改进:
1. 重新设计的窗口缩略图显示方式
2. 重新设计的窗口Group显示方式
3. 同一进程名称的窗口的粘贴显示
4. 加入了一个任务栏项的菜单
5. 任务栏项的顺序拖动调整
6. 重新设计的任务栏托盘隐藏图样的显示方式
7. 任务栏的最右端加入了一个“显示桌面”区域,单击可以显示桌面
8. 可以将正在运行的程序“钉”在任务栏上
好了,下面我们来看图
IE的多标签显示,我们的任务栏现在能预览到所的有标签内容,IE当前的活动标签会有一个窗口画在外边,那种没有的就是不是当前IE的活动标签内容,不过任何一个都是可以用鼠标单击然后直接显示。
这个菜单是新功能之一,比如这个IE,可以为我们显示历史信息,我们最近访问的地址,我们再想打开时只要直接点击一下就可以了,很方便,很人性化的一个改进。同样的功能在Notepad,Word,Excel等这样的程序,一样也会给我们显示最近打开的项目,方便我们快速打开最近的工作项目。这个菜单可以通过单击旁边那个自动出现的小箭头或是鼠标点在任务栏项上后,按住左键向上托动,这个菜单也会出现。
同一个进程名称的任务栏项,会自动的粘贴在一起,这样找起来也很方便,这也是人性化改进的一方面。
Group后的任务栏项的样子。
注意看这个图,呵呵,任务栏上百度那个IE窗口,看它的颜色,鼠标放上去就会有这样的效果,很漂亮的说。使用时会发现,鼠标放在所有的任务栏窗口上的颜色都会是不一样的,效果很漂亮,也许会带来更易于辨认的效果吧,但觉得不明显。
posted @
2008-11-05 23:27 Jonathan Wang 阅读(186) |
评论 (2) |
编辑
前些天Windows 7 Build6801刚刚在网上有下载的时候,便迅速下了一份,兴奋的安装使用,以下为部分截图合使用感受。
首先看桌面:最大的变化莫过于任务栏的变化了,这个从Windows 95开始已经存在了13年的东西,微软终于开始改进它了,在此先不细说,后面有对它的详细介绍。再第二个相对Vista的变化就是Sidebar了,Windows 7的这个版本中,Sidebar已经完全集成到桌面上,再没有边上那一个半透明的条了所有的部件都可以在桌面上任意放置。这个改变也是不错的,Vista中Sidebar如果放了太多的东西,还要分两栏且不能同时显示,虽说Vista中也能把部件放在桌面上,但和放在Sidebar里的总是不一样的感觉,一个放在栏里,一个放外边,觉得不伦不类的。
桌面的右键菜单,Gadgets已经是在桌面上了。
开始菜单,在这看和Vista没有太明显的变化,要说变就是开始菜单的颜色现在会同不同的Aero颜色主题一起变化,不再总是原来Vista的淡黑色了。
开始菜单的另一个重要的变化就是上面的搜索,看图。Search的结果会占满整个开始菜单,而不会像Vista那样,右边那列不变,导致很多搜索结果只能以很小的一条空间显示出来,经常有内容显示不全而被截断。
posted @
2008-11-05 23:23 Jonathan Wang 阅读(279) |
评论 (2) |
编辑
很多初学.net的程序员,也包括一些有相当经验的.net开发人员,对于在.net 中去使用Win32 API,仍不是很了解。在此分享一下我对DllImportAttribute 的认识。
与很多.net attributes
一样,DllAttribute
定义了一些公有的属性来允许开发人员去控制它的行为。与大部分的.net attributes
一样,这些属性可以通过它的构造函数参数来进行设置。首先,我们来看一下类型的定义:
public sealed class DllImportAttribute : Attribute
{
// Fields (first two listings are not typos!)
// These fields are used to control exactly
// how the attribute should be applied to the
// unmanaged function export.
public CallingConvention CallingConvention;
public CharSet CharSet;
public string EntryPoint;
public bool ExactSpelling;
public bool PreserveSig;
public bool SetLastError;
// Constructor (string param used to set fields
// as name / value pairs).
public DllImportAttribute(string dllName);
// Properties.
public object TypeId { virtual get; }
public string Value { get; }
Understanding Platform Invocation Services
// Methods (basic .NET infrastructure stuff).
public virtual bool Equals(object obj);
public virtual int GetHashCode();
public Type GetType();
public virtual bool IsDefaultAttribute();
public virtual bool Match(object obj);
public virtual string ToString();
}
在此我们可以看到,DllImportAttribute定义了两个字段,CallingConvention and CharSet,可以使用两个Enum来进行赋值。
// 指定非托管的函数的调用方式
public enum CallingConvention
{
Cdecl,
FastCall, // 在 .NET version 1.0.*.中不被支持
StdCall,
ThisCall,
Winapi
}
// 定义传递到非托管函数所使用的字符集
public enum CharSet
{
Ansi,
Auto,
None,
Unicode
}
下面是一个简单的PInvoke的示例:
namespace SimpleAPIInvoke
{
using System;
// Must reference to gain access to the PInvoke types.
using System.Runtime.InteropServices;
public class PInvokeClient
{
// The Win32 MessageBox() function lives in user32.dll.
[DllImport("user32.dll")]
public static extern int MessageBox(int hWnd, String pText,
String pCaption, int uType);
public static int Main(string[] args)
{
// Send in some managed data.
String pText = "Hello World!";
String pCaption = "PInvoke Test";
MessageBox(0, pText, pCaption, 0);
return 0;
}
}
}
在上面的代码中,我们使用:
[DllImport("user32.dll")]
public static extern int MessageBox(…);
来调用了Win32的MessageBox函数。在DllImportAttribute中,还定义了一些公有的字段,允许我们在函数导出的过程中对它进行配置。下表给出了它的字段和对应的含义:
|
DllImportAttribute 字段
|
含义
|
|
CallingConvention
|
用于建立函数的调用约定,默认为CallingConvention.WinAPI,相当于__stdcall
|
|
CharSet
|
指定字符串参数如何传递,默认值为CharSet.Ansi
|
|
EntryPoint
|
指定被调用函数的名字或是函数的序号
|
|
ExactSpelling
|
PInvoke会尝试匹配函数的真实原型名称
|
|
PreserveSig
|
默认值为true,设置为true后,非托管的方法签名将不会被转换为托管的方法去返回HRESULT和一个附加的[out, retval]参数用来做返回值
|
|
SetLastError
|
如果指定为true,标识调用者使用Marshal.GetLastWin32Error()去判定在执行方法时是否有错误发生,在C#中默认为false,在VB.Net中默认为true
|
|
下面我们来看一下其中的几个字段的用法:
[DllImport("user32.dll", ExactSpelling = true)]
public static extern int MessageBox(…); // ERROR!
将ExactSpelling = true标记后上面的代码就会出错,因为在user32.dll中并没有MessageBox这个函数,只有MessageBoxA(ANSI版本)和MessageBoxW(Unicode版本),使用了ExactSpelling = true后将会对方法的签名进行严格的匹配,不符合的话将会有EntryPointNotFoundException产生。
[DllImport("user32.dll", ExactSpelling = true, CharSet=CharSet.Unicode)]
public static extern int MessageBoxW(…);
CharSet比较容易理解,也比较简单,在此不做过多的介绍。下面讲一下Calling Conventions
|
CallingConvention Enumeration value
|
含义
|
|
Cdecl
|
调用者清理堆栈,它允许调用函数使用可变参数
|
|
FastCall
|
此项在目前的.Net Framework中还没有被支持
|
|
StdCall
|
被调用者清理堆栈,它是默认的从托管代码中调用非托管函数的转换
|
|
ThisCall
|
第一个参数为“this”指针,并将其存储在ECX中,其它参数顺序入栈。这个调用转换被用于调用非托管的类中的方法。
|
|
Winapi
|
平台的默认转换,在Windows中使用StdCall,在Windows CE中使用Cdecl
|
如果读者对其中的说明仍有不理解,可以去读一些Windows程序设计的资料进行了解。下面介绍指定函数入口点
// 映射MessageBoxW() function 为 'DisplayMessage'.
[DllImport("user32.dll", ExactSpelling = true, CharSet=CharSet.Unicode, EntryPoint = "MessageBoxW")]
public static extern int DisplayMessage(int hWnd, String pText, String pCaption, int uType);
通过在EntryPoint中指定函数的入口点名称,然后在下面的函数声明就可以使用不同的函数名来使用对应的非托管函数了。此处使用DisplayMessage来使用MessageBoxW函数。
(部分内容参考<<Com And Dot Net Interoperability>>)
posted @
2008-07-15 22:04 Jonathan Wang 阅读(1461) |
评论 (7) |
编辑