使用 WCF LOB 适配器 SDK 在 IIS 中托管适配器

本节包含有关在 Internet Information Services (IIS) 中托管使用 Microsoft Windows Communication Foundation (WCF) 业务线 (LOB) 适配器 SDK 构建的适配器的信息。 有关其他托管选项的详细信息,请参阅 托管服务

使用 IIS 和 ASP.NET

可以将 IIS 与启用 ASP.NET 配合使用,以发布使用 WCF LOB 适配器 SDK 创建的适配器。 若要托管 WCF LOB 适配器 SDK 创建的适配器,请配置 Internet Information Services (IIS)以发布 WCF 服务。 接下来,请考虑如何结合 ASP.NET 来使用 WCF 适配器。

在 IIS 中托管 WCF 服务时,有两种可用的托管模式: 并排 和 ASP.NET 兼容模式。 默认托管模式是并行的。 并行模式与其他 WCF 托管解决方案保持一致。 因此,IIS 中托管的 WCF 服务的行为与控制台应用程序中托管的 WCF 服务的行为相同。 但是,这可能是不理想的,因为 Web 开发人员可能期望的行为类似于 ASP.NET。 例如,在并行模式下,WCF 不遵循 web.config配置元素中指定的任何基于 URL 的 <system.web> <authorization> 授权规则。

ASP.NET 兼容模式允许 WCF 服务使用 ASP.NET 的所有功能,并的行为与 ASPX 页相同;但是,在创建 WCF 适配器以启用此功能时,必须执行其他步骤。 有关详细信息,请参见:

WCF 服务和 ASP.NET

在 Internet 信息服务中承载

WCF 托管服务

使用 WCF 适配器服务开发向导

使用 WCF LOB 适配器服务开发向导自动创建用于在 Internet Information Services(IIS)中托管适配器的 Web 项目。 然后,客户端可以使用 Windows 通信框架(WCF)或 Web 服务来使用托管适配器。

将适配器发布为 IIS 中托管的 WCF 服务

  1. 打开 Visual Studio。 在“ 文件 ”菜单上,选择“ 新建”,然后选择 “网站”。

  2. “模板”中,选择 “Visual C#”,然后选择 “WCF 适配器服务”。

  3. 输入文件夹以保存解决方案,然后选择“ 确定”。 WCF 适配器服务开发向导将启动。

  4. 在“简介” 页上,单击“下一步” 。

  5. 选择操作 页上,指定要用于此托管服务的绑定、契约和操作。

    1. “选择绑定 ”列表中,选择要使用的适配器绑定,然后单击“ 配置”。 此时会显示“ 配置适配器 ”对话框。 提供调用适配器和检索操作元数据所需的值。

    2. 在“ 安全 ”选项卡上,选择要在将客户端凭据传递给适配器时使用的客户端 凭据类型

      凭据类型 DESCRIPTION
      没有 客户端不需要提供凭据。
      Windows操作系统 客户端将使用 Windows 凭据。
      用户名 客户端将提供用户名和密码。
      证书 客户端将使用 X.509 证书进行身份验证。 如果设置了此值,请单击“客户端证书”区域中的“浏览”,然后选择要使用的证书。
    3. “URI 属性 ”选项卡上,指定适配器所需的 URI 参数。 此选项卡中显示的条目因适配器类中 ConnectionUri Properties 公开的属性而异。

    4. 在“ 绑定属性 ”选项卡上,指定适配器所需的绑定属性的值。 “常规”部分包含常见设置,例如超时值。 根据您的AdapterBinding类中公开的自定义属性,显示其他属性。

  6. 指定配置值后,单击“ 连接”。

    1. “选择协定类型 ”列表中选择要使用的协定。 这会将此适配器提供的类别和操作列表填充到“选择类别”树控件中。 如果适配器通过 MetadataRetrievalClient 类实现搜索功能,则可以在 类别 字段中输入搜索词以仅返回包含搜索词的类别和作。

      注释

      只有出站操作可供选择。

    2. “可用类别和作 ”框中,选择要添加的项,然后单击“ 添加”。 添加所需项后,单击“ 下一步”。

  7. “配置服务和终结点行为 ”页上,为此适配器设置所需的行为。

    1. “服务行为配置”部分包含控制服务行为的条目。 运行向导后,可以通过编辑 web.config 文件来修改所选的服务行为。

      资产 DESCRIPTION
      EnableMetadataExchange 将此值设置为 True 可使服务元数据发布到客户端请求。 还可以通过在 web.config中修改 <serviceMetadata httpGetEnabled=“”> 来设置此设置。默认值为 False
      IncludeExceptionDetailsinFault 将此值设置为 True 会导致在 SOAP 错误中返回给客户端的托管异常信息。 还可以通过在 web.config中修改 <serviceDebug usingincludeExceptionDetailInFaults=“”> 来设置此设置。默认值为 False
      名称 服务行为配置的名称。
      UseServiceCertificate 此值确定服务是否将使用 X.509 证书向客户端进程验证自身身份。 默认值为 True。
      FindValue 此值用于在证书存储中搜索特定的 X.509 证书。 可以通过修改 <serviceCredentials findValue=“”> 来设置。web.config 注意: 仅当 UseServiceCertificate 设置为 True 时才指定该属性的值。
      StoreLocation 此值指定要搜索指定证书的系统存储位置。 也可通过在 web.config中修改 <serviceCredentials storeLocation=“”> 来设置此设置。 注意: 仅当 UseServiceCertificate 设置为 True 时,才为此属性指定值。
      StoreName 此值指定要搜索指定证书的特定系统存储。 可以通过在 web.config 中修改 <serviceCredentials storeName=""> 来进行设置。注意:仅当 UseServiceCertificate 设置为 True 时,才能指定此属性的值。
      X509FindType 要与前面指定的 FindValue 一起使用的搜索类型,以便查找要使用的特定证书。 也可以在 web.config 注释中修改 <serviceCredentials x509FindType=“”>,为此属性指定一个值,前提是 UseServiceCertificate 设置为 True
    2. “终结点行为配置”部分控制终结点行为。

      资产 DESCRIPTION
      名称 终结点行为的名称
      认证类型 此值指示适配器在何处获取传入文档的客户端凭据。 若要使客户端能够指定要向服务进行身份验证的客户端证书,请将此证书设置为 ClientCredentialUsernamePassword。 若要使客户端能够将用户名和密码指定为 HTTP 标头的一部分,请将其设置为 HTTPUsernamePassword。 若要使客户端能够通过 ClientCredential 接口指定凭据,请将此接口设置为 “自动”。如果此作失败,客户端可以将凭据作为 HTTP 标头的一部分传递。

      还可以通过在 web.config中修改 <endpointBehavior adapterSecurityBridgeType> 来设置此值。默认值为 “自动”。
      UsernameHeader 这指定将用于将用户名传递给服务的标头的名称。 有关 HTTP 标头的详细信息,请参阅对自定义 HTTP 和 SOAP 标头的支持。 https://go.microsoft.com/fwlink/?LinkId=106692

      还可以通过在 web.config中修改 <endpointBehavior usernameHttpHeader> 来设置此值。 注意: 如果将 AuthenticationType 设置为 HTTPUserNamePassword,则必须为此属性指定值。 如果设置为 “自动”,则此属性是可选的。
      PasswordHeader 这指定将用于将用户密码传递给服务的标头的名称。 有关 HTTP 标头的详细信息,请参阅对自定义 HTTP 和 SOAP 标头的支持。 https://go.microsoft.com/fwlink/?LinkId=106692

      还可以通过在 web.config中修改 <endpointBehavior passwordHttpHeader< 来设置此值。 注意: 如果将 AuthenticationType 设置为 HTTPUserNamePassword,则必须为此属性指定值。 如果设置为 “自动”,则此属性是可选的。

      重要

      Microsoft建议使用最安全的可用身份验证选项。 此过程中所述的身份验证方法需要高度信任,并具有其他身份验证方法中不存在的风险。 仅当其他方法不可行时,才使用此身份验证方法。

    3. 设置所需行为后,单击“ 下一步 ”继续。

  8. “配置服务终结点绑定和地址 ”页上,可以配置协定的地址和绑定属性。 在“ 选择要配置列表的协定 ”中选择协定,然后在“ 配置合同地址和绑定 ”对话框中输入所需值。

    1. 选择“绑定属性”下的 BindingConfiguration 条目。 向导仅支持基本 HTTP 绑定,因此绑定配置字段会自动设置为 System.ServiceModel.Configuration.BasicHttpBindingElement。 若要更改此绑定的配置属性,请单击省略号 ... 按钮。 若要使用安全信道,必须始终将 Mode 属性设置为 传输。 这是默认值。

    2. 选择 EndpointName,然后输入终结点的所需名称。

    3. 若要应用更改,请单击“ 应用”。

  9. 若要继续,请单击 “下一步” 。 “摘要”页列出了所选适配器操作的树结构。

  10. 查看摘要,然后单击“ 完成”。

  11. 该向导将创建一个 Web 项目并添加以下文件。

    文件 DESCRIPTION
    .svc 引用 WCF 代理的服务文件。
    .cs 实现 WCF 代理。
    web.config 包含<终结点、<绑定>和<行为>元素的<system.ServiceModel>
  12. 发布 WCF 服务项目。

    1. 右键单击解决方案资源管理器中的项目,然后单击“ 发布”。

    2. 在“ 发布网站 ”对话框中,指定 WCF 服务的目标 URL。

    3. 选择 “允许更新此预编译站点”。

    4. 选择 “使用固定命名”和“单页程序集”

    5. 选择 “在预编译程序集上启用强命名”,然后指定要使用的签名密钥。

  13. 若要发布网站,请单击“ 确定”。

  14. 验证服务是否已成功发布。

    1. 启动 IIS 管理控制台。 单击“ 开始”,指向 管理工具,然后单击“ Internet 信息服务”。

    2. 导航到已发布服务的节点。 如果服务发布为 http://localhost/myservice,请导航到 Internet Information Services>计算机名称>网站>默认网站>myservice

    3. 在右窗格中,右键单击 .svc 文件,然后单击“ 浏览”。 该网页会显示有关服务的信息。 现在,您可以通过客户端应用程序使用 WCF 或 Web 服务调用来消费此服务。

安全

当适配器托管在服务中时,来自客户端应用程序的调用使用适配器安全网桥将客户端凭据传递给适配器。

当 WCF 客户端向 WCF 服务发送身份验证时,通常服务会处理该身份验证。 但是,对于适配器,想法是捕获身份验证信息,以便与基础 LOB 系统一起使用。 这是通过适配器安全桥实现的,该桥呈现为终结点行为。 作为适配器开发人员,无需实现即可利用此功能;但是,部署适配器时,必须考虑客户端如何向服务提供凭据。

如果您使用消息级安全性,适配器安全网桥可以检索由客户端应用程序在任意绑定上发送的客户端凭证。 如果使用基本 HTTP 绑定,则可以选择使用自定义标头传递用户名和密码信息。 建议使用 WCF 提供的 ClientCredential 类传递凭据,但许多 Web 服务客户端应用程序需要使用自定义标头来传递凭据。

下面是一个示例配置,其中适配器在客户端应用程序提供的 ClientCredentials 中查找凭据。 如果没有找到任何内容,则适配器将查找请求中指定的 HTTP 请求标头。

<endpointBehaviors>
   <behavior name="customEndpointBehavior">
      <endpointBehavior usernameHttpHeader="UNHdr" passwordHttpHeader="PWHdr"
         adapterSecurityBridgeType="Auto" />
    </behavior>
</endpointBehaviors>

另请参阅

开发活动