<serviceMetadata>
指定服务元数据的发布和相关信息。
configuration
system.serviceModel
behaviors
<serviceBehaviors>
behavior
<serviceMetadata>
语法
<serviceMetadata externalMetadataLocation="String"
httpGetBinding="String"
httpGetBindingConfiguration="String"
httpGetEnabled="Boolean"
httpGetUrl="String"
httpsGetBinding="String"
httpsGetBindingConfiguration="String"
httpsGetEnabled="Boolean"
httpsGetUrl="String"
policyVersion="Policy12/Policy15" />
特性和元素
下列各节描述了特性、子元素和父元素。
特性
属性 | 说明 |
---|---|
externalMetadataLocation | 一个包含 WSDL 文件的位置的 URI,该文件将返回到用户以响应 WSDL 和 MEX 请求而非自动生成的 WSDL。 当未设置此属性时,将返回默认的 WSDL。 默认值为空字符串。 |
httpGetBinding | 一个字符串,指定将用于通过 HTTP GET 进行元数据检索的绑定类型。 此设置是可选的。 如果未指定此设置,则将使用默认绑定。 仅支持具有支持 IReplyChannel 的内部绑定元素的绑定。 此外,绑定的 MessageVersion 属性必须为 None。 |
httpGetBindingConfiguration | 一个字符串,用于设置在 httpGetBinding 特性中指定的绑定的名称,此名称引用此绑定的其他配置信息。 必须在 <bindings> 节中定义相同的名称。 |
httpGetEnabled | 一个布尔值,指定是否发布服务元数据以便使用 HTTP/Get 请求进行检索。 默认值为 false 。如果未指定 httpGetUrl 属性,则发布元数据的地址为服务地址加上“?wsdl”。 例如,如果服务地址为 http://localhost:8080/CalculatorService ,则 HTTP/Get 元数据地址为 http://localhost:8080/CalculatorService?wsdl 。如果此属性为 false ,或服务的地址不基于 HTTP 或 HTTPS,则忽略“?wsdl”。 |
httpGetUrl | 一个 URI,指定发布元数据的地址以便使用 HTTP/Get 请求进行检索。 如果指定了相对 Uri,则它将被视为相对于服务的基址。 |
httpsGetBinding | 一个字符串,指定将用于通过 HTTPS GET 进行元数据检索的绑定类型。 此设置是可选的。 如果未指定此设置,则将使用默认绑定。 仅支持具有支持 IReplyChannel 的内部绑定元素的绑定。 此外,绑定的 MessageVersion 属性必须为 None。 |
httpsGetBindingConfiguration | 一个字符串,用于设置在 httpsGetBinding 特性中指定的绑定的名称,此名称引用此绑定的其他配置信息。 必须在 <bindings> 节中定义相同的名称。 |
httpsGetEnabled | 一个布尔值,指定是否发布服务元数据以便使用 HTTPS/Get 请求进行检索。 默认值为 false 。如果未指定 httpsGetUrl 属性,则发布元数据的地址为服务地址加上“?wsdl”。 例如,如果服务地址为 https://localhost:8080/CalculatorService ,则 HTTP/Get 元数据地址为 https://localhost:8080/CalculatorService?wsdl 。如果此属性为 false ,或服务的地址不基于 HTTP 或 HTTPS,则忽略“?wsdl”。 |
httpsGetUrl | 一个 URI,指定发布元数据的地址以便使用 HTTPS/Get 请求进行检索。 |
policyVersion | 一个字符串,指定所使用的 WS-Policy 规范的版本。 此属性的类型为 PolicyVersion。 |
子元素
无
父元素
元素 | 说明 |
---|---|
<behavior> | 指定行为元素。 |
备注
此配置元素允许您控制服务的元数据发布功能。 为了防止无意中泄露潜在的敏感服务元数据,Windows Communication Foundation (WCF) 服务的默认配置将禁用元数据发布。 默认情况下此行为是安全的,但也意味着你无法使用元数据导入工具(例如 Svcutil.exe)生成调用服务所需的客户端代码,除非在配置中显式启用服务的元数据发布行为。 使用此配置元素,可以为服务启用此发布行为。
有关配置此行为的详细示例,请参阅元数据发布行为。
利用可选的 httpGetBinding
和 httpsGetBinding
属性,你可以配置用于通过 HTTP GET(或 HTTPS GET)检索元数据的绑定。 如果未指定这两个属性,则根据情况使用相应的默认绑定(采用 HTTP 时为 HttpTransportBindingElement
,采用 HTTPS 时为 HttpsTransportBindingElement
)进行元数据检索。 请注意:不能将这些属性用于内置 WCF 绑定。 仅支持具有支持 IReplyChannel 的内部绑定元素的绑定。 此外,绑定的 MessageVersion 属性必须为 None。
为了降低服务被恶意使用者滥用的可能性,可以使用 SSL over HTTP (HTTPS) 机制来确保传输的安全。 为此,必须首先将一个适合的 X.509 证书绑定到承载该服务的计算机上的特定端口。 (有关详细信息,请参阅使用证书。)然后,将此元素添加到服务配置中,并将 httpsGetEnabled
属性设置为 true
。 最后,将 httpsGetUrl
属性设置为服务元数据终结点的 URL,如下面的示例所示。
<behaviors>
<serviceBehaviors>
<behavior name="NewBehavior">
<serviceMetadata httpsGetEnabled="true"
httpsGetUrl="https://myComputerName/myEndpoint" />
</behavior>
</serviceBehaviors>
</behaviors>
示例
下面的示例配置服务以便使用 <serviceMetadata> 元素公开元数据。 它还配置终结点以便将 IMetadataExchange
协定作为 WS-MetadataExchange (MEX) 协议的实现公开。 此示例使用的是 mexHttpBinding
,这是一种便于使用的标准绑定,与安全模式设置为 wsHttpBinding
的 None
等效。 在终结点中使用相对地址“mex”,当针对服务基址对其进行解析时将得到终结点地址 http://localhost/servicemodelsamples/service.svc/mex
。
<configuration>
<system.serviceModel>
<services>
<service name="Microsoft.ServiceModel.Samples.CalculatorService"
behaviorConfiguration="CalculatorServiceBehavior">
<!-- This endpoint is exposed at the base address provided by the host: http://localhost/servicemodelsamples/service.svc -->
<endpoint address=""
binding="wsHttpBinding"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
<!-- The mex endpoint is exposed at http://localhost/servicemodelsamples/service.svc/mex
To expose the IMetadataExchange contract, you must enable the serviceMetadata behavior as demonstrated below. -->
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
<!--For debugging purposes set the includeExceptionDetailInFaults attribute to true-->
<behaviors>
<serviceBehaviors>
<behavior name="CalculatorServiceBehavior">
<!-- The serviceMetadata behavior publishes metadata through the IMetadataExchange contract. When this behavior is
present, you can expose this contract through an endpoint as shown above. Setting httpGetEnabled to true publishes
the service's WSDL at the <baseaddress>?wsdl eg. http://localhost/servicemodelsamples/service.svc?wsdl -->
<serviceMetadata httpGetEnabled="True" />
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>