如何在 WCF Web 服务中实现策略?

Posted

技术标签:

【中文标题】如何在 WCF Web 服务中实现策略?【英文标题】:How to implement Policy in WCF web service? 【发布时间】:2016-08-07 23:00:14 【问题描述】:

我想创建一个与给定 Web 服务相同的 Web 服务,仅取决于服务描述语言。 我设法创建了完全相同的服务,除了这部分元数据:

<wsp:Policy wsu:Id="BasicHttpsBinding_policy">
<wsp:ExactlyOne>
<wsp:All>
<sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
<wsp:Policy>
<sp:TransportToken>
<wsp:Policy>
<sp:HttpsToken RequireClientCertificate="false"/>
</wsp:Policy>
</sp:TransportToken>
<sp:AlgorithmSuite>
<wsp:Policy>
<sp:Basic256/>
</wsp:Policy>
</sp:AlgorithmSuite>
<sp:Layout>
<wsp:Policy>
<sp:Strict/>
</wsp:Policy>
</sp:Layout>
</wsp:Policy>
</sp:TransportBinding>
</wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>

那是什么?以及如何生成服务描述语言?

【问题讨论】:

【参考方案1】:

我认为您搜索此处描述的“外部政策附件”:http://www.w3.org/TR/ws-policy-attach/#ExternalPolicyAttachment

要在您的 WSDL 文档中添加 &lt;wsp:Policy..,您应该首先在您的 Web 配置文件中添加 HTTPS 绑定。

因此,如果您使用的是 https,那么您可以添加 服务节点中的基地址:

 <baseAddresses>
     <add baseAddress="http://yourdomain.com/"/>
     <add baseAddress="https://yourdomain.com/"/>
 </baseAddresses>

然后添加基本的HTTPS绑定节点:

 <basicHttpsBinding>
    <binding name="BasicHttpsBinding_Name">
      <security>
        <transport clientCredentialType="None" />
      </security>
    </binding>
  </basicHttpsBinding>

你也应该像下面这样清除端点:

 <endpoint address="" binding="basicHttpsBinding" 
            bindingConfiguration="BasicHttpsBinding_Name"
            contract="NameSpace.Name" name="BasicHttpsBinding_Name" />

通过编译您的服务,策略节点将出现在您的 WSDL 上。 另请参阅一些解决方案here 希望对你有帮助。

【讨论】:

我尝试了这个解决方案,但我遇到了更多问题!我将尝试解决问题并更新您。没想到这么简单。 @MegaTron:要在您的 WSDL 文档中添加

以上是关于如何在 WCF Web 服务中实现策略?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 RESTful WCF API 中实现 HMAC 身份验证

在 WCF 中实现 JSON-RPC

如何在 C# 中实现线程关联?

使用 WCF 客户端 + cookie 进行 Web 服务调用

wcf RESTful服务和WEB API的区别

使用 WS 安全性在 WCF .NET 中向 Java Web 服务发送请求