IIS 集成

 

上一次修改主题: 2005-05-23

在 Exchange Server 2003 中,所有基于 Internet 的客户端访问协议都作为 IIS 的一部分运行。安装 Exchange Server 2003 时,它将使用其他命令谓词和高级路由组件来扩展(而不是替换)IIS 中的SMTP 和 NNTP 协议堆栈。Exchange Server 2003 Internet 协议堆栈是:

  • POP3 POP3 是最基本的邮件检索协议。POP3 只能访问用户的收件箱文件夹。Exchange 2003 支持 POP3,以便用 POP3 客户端访问 Exchange 2003。
  • IMAP4 IMAP4 用于访问邮箱信息。IMAP4 比 POP3 更高级,因为它支持基本的联机功能,并且除了能够访问收件箱以外,还能访问其他文件夹。除了提供对用户邮箱的有限访问支持以外,IMAP4 的 Exchange 2003 实现还提供了以下功能:
    • 访问公用文件夹
    • 委派访问另一个用户的邮箱
    • 匿名访问特定的 IMAP 帐户名
  • SMTP SMTP 是 Exchange Server 2003 的主要邮件协议。SMTP 用于在同一个路由组的服务器之间移动邮件,并且是路由组之间移动邮件的首选协议。Exchange Server 2003 对 IIS SMTP 堆栈的增强包括:
    • 可支持容错路由的命令
    • 高级队列引擎
    • 经过增强的邮件分类代理
  • NNTP NNTP 的 Exchange Server 2003 实现将以下功能添加到 NNTP 中:
    • 内容索引提供了对公用文件夹的搜索功能
    • 完整的新闻复制接受能力,不管选择什么后端的存储(文件系统或公用文件夹)
    • MAPI 或 NNTP 客户端可以读取或投递 Microsoft Exchange Information Store 服务所支持的新闻组
  • WebDAV WebDAV 是对 HTTP 的扩展,它提供了用于访问 Microsoft Exchange Information Store 服务的 Web 接口。

检查 IIS 和 Microsoft Exchange Information Store 服务之间的进程间通信

除了 MAPI 以外,Exchange Server 2003 客户端访问协议都不是 Microsoft Exchange Information Store 服务的一部分。它们是由 IIS 驻留的。将这些协议与 Microsoft Exchange Information Store 服务分开可以增加 Exchange Server 2003 的可靠性、灵活性和可伸缩性。但是,协议必须能够在 IIS 和 Microsoft Exchange Information Store 服务之间快速传输数据。为了使快速数据传输更容易,Exchange Server 2003 包含了一个名为 Exchange 进程间通信 (ExIPC) 层的排队层,也称为 EPOXY,因为它是在 Epoxy.dll 中实现的。

如下图所示,ExIPC 与 Exchange 可安装文件系统 (ExIFS) 一前一后配合工作,在 IIS 和 Exchange Server 2003 之间移动邮件。

ExIPC 提供了高性能的进程间通信功能。像轻型远程过程调用 (LRPC) 一样,ExIPC 使用在共享内存循环队列 (SMQ) 模型上生成的共享内存(32 KB 映射内存节)以便在 INETINFO 和 STORE 进程与 DSAccess 缓存之间通信。这确保了缓存对运行 DSAccess 的所有进程均可用。ExIPC 包括 Microsoft Exchange Information Store 服务和用于提供绑定设备(在 IIS 和 Microsoft Exchange Information Store 服务之间的快速可靠通信)的协议 DLL、共享内存堆以及一对基于共享内存的队列。

e0dd9a6a-8d6d-4bfd-87f0-b65fcb63ba83

Exchange 可安装文件系统

ExIPC 与 Exchange 可安装文件系统 (ExIFS) 一前一后配合工作,在 IIS 和 Exchange 之间移动邮件。ExIFS 通过 Microsoft Win32 文件系统 API 提供对 Microsoft Exchange Information Store 服务的访问支持。ExIFS 使流文件作为很多更小的、名为虚拟文件的文件提供给 IIS。IIS 获得虚拟文件的句柄,并通过 ExIFS 将传入数据直接写入流文件。同样,也是通过 ExIFS 直接从流文件读取传出邮件。在流文件中,邮件变成页面列表(页码包含在 .edb 文件中),并且任何需要的属性都会从 .stm 文件提升到 .edb 文件中。

197e870f-4550-4f0a-8e0d-43d6506ed938

然后,在流文件中邮件变成页面列表(页码包含在 .edb 文件中)。任何所需属性均从 .stm 文件提升到 .edb 文件中。

该图说明了 IIS 和 ExIFS 之间的文件流过程。ExIFS 将流文件作为更小的虚拟文件提交给 IIS。数据(例如,校验和数据以及属性数据的提升信息)首先从 ExIFS 移动到可扩展存储引擎,然后移动到 Exchange 信息存储。IIS 和 Exchange 信息存储也会交换信息(比如,ExIFS 放置邮件的页码),以便将页码记录并存储在 Exchange 信息存储内代表邮件的记录中。

入站邮件

邮件进入系统时,IIS 将在 ExIFS 中创建新的文件。并将数据写入在保留页上的新文件中。然后,ExIFS 将页面列表返回给 Exchange 存储。Exchange 信息存储对页面进行处理,并将它们存储在代表邮件的记录中。然后,可扩展存储引擎通过将信息记录到存储组的事务日志文件中,从而提交保留页上的数据。这时,页面从保留状态更改为提交状态。

note注意:
如果存储组的循环日志记录功能已打开,则可扩展存储引擎不会将通过流文件数据传入的数据写入事务日志文件。在这个例子中,流文件数据首先会放在流文件中。只有在还原后的恢复和日志前滚时,事务日志中的数据才是必需的。因为日志前滚只能发生在循环日志记录功能被关闭时,因此,只有当循环日志记录功能被关闭时,事务日志中的流文件数据才是有用的。

出站邮件

从系统检索邮件时,Exchange 存储进程将接收邮件所引用的页面列表。该页面列表被传递给 IIS。然后,IIS 使用该页面列表打开 ExIFS 中的文件。邮件从 Exchange 信息存储中以数据流的方式不经过转换快速地读取出来。

文件系统语义

ExIFS 将 Win32 文件调用反映给 Exchange 存储。因此,可以使用 Win32 文件系统 API 来访问 Exchange Server 中的数据。例如,诸如 FindFileFirst 这样的调用可以访问公用文件夹,以获得邮件列表。另外,可以将驱动器映射到您自己的邮箱,并使用常规命令行函数来访问您的收件箱。ExIFS 将 Exchange 数据库的内容显示为普通文件。

eff03088-85d6-43d0-918b-864fdb2cb86b

该图说明了与存储的交互是通过 ExWin32.dll 实现的。除了支持通过 ExWin32.dll 实现的、与 Exchange 存储的交互以外,ExIFS.sys 还支持从 kernel32.dll 中导出的所有与文件系统相关的函数。

ExIPC 绑定设备

ExIPC 绑定设备使您能够在两个进程(例如 INETINFO 和 STORE)之间创建和连接任意数目的队列。该绑定设备包括的中心队列管理器用于跟踪特定进程将与之通信的队列和进程。该设备用于在其他进程失败时解除绑定和执行队列清理。

每个协议队列都是循环的,并且大小是固定的。在进程间通信期间,数据被存储在共享的内存堆中,并且通过数据句柄进行引用。数据句柄将被排队和出列。然后,IIS 或 Exchange 存储通过句柄来引用一部分共享内存。

ExIPC 协议存根

每个协议在 STORE.exe 中都有一个 ExIPC 接口。例如,POP3 的 ExIPC 协议存根是 expop.dll。该组件将来自 STORE.exe 的参数(例如,邮件或操作的指针)传递给 INETINFO.exe 中的 ExIPC 接口 (drviis.dll)。