2014年8月7日星期四

ASP.NET Web API WebHost宿主环境中管道、路由

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
ASP.NET Web API WebHost宿主环境中管道、路由  阅读原文»

ASP.NET Web API WebHost宿主环境中管道、路由

ASP.NET Web API WebHost宿主环境中管道、路由

上篇中说到ASP.NET Web API框架在SelfHost环境中管道、路由的一个形态,本篇就来说明一下在WebHost环境中ASP.NET Web API框架中的管道、路由又是哪一种形态。

ASP.NET Web API路由、管道

  • 开篇介绍示例

  • 路由对象介绍

  • 管道模型

  • ASP.NET Web API selfhost宿主环境中管道、路由

  • ASP.NET Web API webhost宿主环境中管道、路由

ASP.NET Web API webhost宿主环境中管道、路由

下面将会主要讲解路由的注册执行过程(WebHost环境),对于管道不会去刻意的说明,都会包含在路由的讲解中,拆开来说明效果不太好。

HttpRoute->HostedHttpRoute->HttpWebRoute->Route

想要清楚的了解路由的执行过程以及管道的形态,就必须对路由对象熟知,然而在前面的《ASP.NET Web API 路由对象介绍》篇幅中只是分别的对各个环境下的路由对象类型进行了说明,并没有说明转变的过程。

现在就来讲解路由对象的“转变”过程。

示例代码1-1

protectedvoidApplication_Start(objectsender,EventArgse)
GlobalConfiguration.Configuration.Routes.MapHttpRoute(
"DefaultAPI","api/{controller}/{id}",new{controller="product",id=RouteParameter.Optional});

示例代码1-1中是在WebHost环境下进行的路由注册,根据MapHttpRoute()方法我们转定义过去应该是一个HttpRouteCollection类型的扩展方法类型HttpRouteCollectionExtensions,既然是HttpRouteCollectionExtensions类型里的实现那我们就过去看看到底啥情况。

示例代码1-2

publicstaticIHttpRouteMapHttpRoute(thisHttpRouteCollectionroutes,stringname,stringrouteTemplate,objectdefaults,objectconstraints,HttpMessageHandlerhandler)
if(routes==null)
throwSystem.Web.Http.Error.ArgumentNull("routes");
HttpRouteValueDictionarydictionary=newHttpRouteValueDictionary(defaults);
HttpRouteValueDictionarydictionary2=newHttpRouteValueDictionary(constraints);
IDictionary<string,object>dataTokens=null;
HttpMessageHandlerhandler2=handler;
IHttpRouteroute=routes.CreateRoute(routeTemplate,dictionary,dictionary2,dataTokens,handler2);
routes.Add(name,route);

我们可以看到返回类型是IHttpRoute,生成则是由HttpRouteCollection类型的实例调用其中的CreateRoute()方法来实现,这里有的朋友要问了,这不是SelfHost中的路由注册实现方式吗?回答是对的,只不过在WebHost中利用多态来实现返回成其他的类型,接着往下看。

既然都看到了在这里发生的变化,那说明是有继承了HttpRouteCollection类型的这么一个类型然后创建的路由对象。这样一理就清晰多了,在SelfHost环境中HttpRouteCollection类型是存在于HttpConfiguration类型的对象中,并不单独使用。而在WebHost中也是。

这个时候我们再回过头来看一下代码1-1中的GlobalConfiguration类型中的定义。

示例代码1-3

privatestaticLazy<HttpConfiguration>_configuration=newLazy<HttpConfiguration>(delegate{
HttpConfigurationconfiguration=newHttpConfiguration(newHostedHttpRouteCollection(RouteTable.Routes));
configuration.Services.Replace(typeof(IAssembliesResolver),newWebHostAssembliesResolver());
configuration.Services.Replace(typeof(IHttpControllerTypeResolver),newWebHostHttpControllerTypeResolver());
configuration.Services.Replace(typeof(IHostBufferPolicySelector),newWebHostBufferPolicySelector());
returnconfiguration;
publicstaticHttpConfigurationConfiguration
return_configuration.Value;

从代码1-3中我们可以看到_configuration静态变量使用了延迟加载,啥意思呢就是下面的那个HttpConfiguration类型的Configuration属性如果使用了才会去实例化,跑偏了这不是重点。

重点是在实例化静态变量_configuration中可以清楚的看到使用了HostedHttpRouteCollection类型的路由集合类型对象作为构造函数参数。可以自行的去看一下HostedHttpRouteCollection的内部结构。

现在再回到创建路由的那会,也就是代码1-1和代码1-2中所示的那样,实际也就是HostedHttpRouteCollection类型在创建路由对象,按照老规矩直接看实现代码。

示例代码1-4

Exchange Server 2013系列十二:邮箱的基本管理  阅读原文»

Exchange Server 2013系列十二:邮箱的基本管理

Exchange Server 2013系列十二:邮箱的基本管理

杜飞

邮箱是 Exchange 组织中信息工作人员最常用的收件人类型。每个邮箱都与一个 Active Directory 用户帐户关联。用户可以使用邮箱发送和接收邮件,并可以存储邮件、约会、任务、便笺和文档。邮箱是 Exchange 组织中用户的主要邮件传递和协作工具。每个邮箱由 Active Directory 用户以及存储在 Exchange 邮箱数据库中的邮箱数据组成(如下图所示)。邮箱的所有配置数据都存储在 Exchange 用户对象的 Active Directory 属性中。邮箱数据库包含与用户帐户关联的邮箱中的实际数据。

image

删除邮箱,则存储在 Exchange 邮箱数据库中的邮箱数据将被标记为删除,而且关联的用户帐户也将从 Active Directory 中删除。若要保留用户帐户,仅删除邮箱数据,则必须禁用邮箱。

邮箱类型:

  • 用户邮箱 用户邮箱将分配给 Exchange 组织中的单个用户。用户邮箱为用户提供了丰富的协作平台。用户可以发送和接收邮件、管理其联系人、安排会议和维护任务列表。他们还可以让语音邮件发送到自己的邮箱。用户邮箱是最常用的邮箱类型,而且通常是分配给组织中用户的邮箱类型。

  • 链接邮箱 链接邮箱是由独立的受信任林中的用户访问的邮箱。如果组织在资源林中部署 Exchange,则可能需要使用链接邮箱。资源林方案使组织可以将 Exchange 集中在单个林中,同时允许使用一个或多个受信任林中的用户帐户访问 Exchange 组织。

image

下面,我们就来梳理一下关于邮箱的基本操作:

启用邮箱

这个比较简单,分为新建用户时分配邮箱和为现有的AD用户分配邮箱,操作比较简单,如果是为单个用户分配邮箱可以通过EAC界面,也可以使用下面的命令:

  Enable-Mailbox user01@dufei.com  -Database DB01  

如下图所示:

image

如果是批量启用,可以使用命令:

Get-User -RecipientTypeDetails User -Filter { UserPrincipalName -ne $Null } | Enable-Mailbox

如下图所示:

image

邮箱迁移

邮箱迁移又称为邮箱移动。移动邮箱时,它将从源邮箱数据库移动到目标邮箱数据库。目标邮箱数据库可以位于不同的 Active Directory 站点中不同域的相同服务器或不同服务器上,还可以位于另一个林中。一般我们在遇到Exchange升级、邮箱损坏、物理位置变化等情况时会需要进行邮箱迁移。方法如下:我们在此就将DB01数据中的邮箱迁移到DB02数据库中。

image

然后,选择迁移DB01中的邮箱名:

image

接下来,需要指定目标数据库名,在此指定DB02中,还需要指定迁移名称。

image

下一步之后,出现下图所示的界面:指定一个用户来接收迁移报告。

image

接下来等待迁移的完成:

image

必须状态从"正在同步"变为"已完成",然后从exadmin 的邮件可以看到迁移信息:

image

刚才介绍的批量移动,只适合本地移动,如果是在两个不同的内部Exchange林之间移动邮箱或者是在混合部署中的远程行动,需要用到迁移端点。而同一个Exchchange系统中两个数据库之间移动属于本地移动,不需要用到迁移端点。

添加、删除邮箱的电子邮件地址

可以使用 EAC 或命令行管理程序添加或删除用户邮箱的电子邮件地址。 可以为同一个邮箱配置多个电子邮件地址。 这些附加地址称为"代理地址"。 用户可以使用代理地址接收发送给其他电子邮件地址的电子邮件。 任何发送到用户的代理地址的电子邮件都会传递给其主电子邮件地址,该地址也称为"主 SMTP 地址"或者"默认答复地址"。

方法如下:在 EAC 中,导航到"收件人">"邮箱"。在用户邮箱列表中,单击要向其添加电子邮件地址的邮箱,然后单击"编辑"。出现如下图所示的界面:

image

每个电子邮件地址类型都有一个默认答复地址。默认答复地址以粗体显示。若要更改默认答复地址,请选择要设置为默认选项的电子邮件地址,然后双击以对其进行编辑。

邮件转发

利用邮件转发可以将邮箱配置为将发送给用户的电子邮件转发给其他收件人。方法:在邮箱属性页上,单击"邮箱功能"。在"传递选项"选项下,单击"查看详情"以查看设置,或者将设置更改为将发送给用户的邮件转发给其他收件人。如下图所示:

image

在此页面上,还可以设置用户发送邮件的收件人最大数量。对于内部部署 Exchange 组织,收件人数目不受限。对于 Exchange 在线组织,限制是 500 个收件人。

默认情况下,创建邮箱时,会将 DeliverToMailboxAndForward 参数的值设置为 $false。 在使用 EAC 配置邮件转发时,不会更改此值。 这意味着会将发送给用户邮箱的电子邮件发送到转发地址,但不将其复制到用户邮箱。 如果希望将邮件同时

阅读更多内容

没有评论:

发表评论