为什么WCF服务的WSDL不包含STS的自定义绑定?

时间:2009-08-21 16:00:07

标签: wcf wsdl wcf-security

我正在编写一个使用WSHttpFederationBinding发布端点的C#WCF服务。我们有自己的安全令牌服务器提供令牌,呼叫者需要使用自定义绑定。

对于我编写的C#客户端来说,这一切都运行正常:这在app.config中有一个自定义绑定,如下所示:

<bindings>
  <customBinding>
    <binding name="CustBind">
      <security authenticationMode="UserNameForCertificate" requireDerivedKeys="true"
                messageProtectionOrder="SignBeforeEncryptAndEncryptSignature"
                requireSecurityContextCancellation="false"
                requireSignatureConfirmation="false">
        <secureConversationBootstrap/>
      </security>
      <httpTransport/>
    </binding>
  </customBinding>
  <wsFederationHttpBinding>
    <binding name="FedBind">
      <security>
        <message issuedTokenType="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1"
                 negotiateServiceCredential="false">
          <issuer address="http://STSHost/MySTS" binding="customBinding"
                  bindingConfiguration="CustBind">
            <identity>
              <certificateReference x509FindType="FindBySubjectName" findValue="localhost"/>
            </identity>
          </issuer>
        </message>
      </security>
    </binding>
  </wsFederationHttpBinding>
</bindings>

然而,我想要的是让用户能够以他们想要的任何语言生成自己的客户端,只需给出WCF服务发布的WSDL。这个问题是当我使用Developer Studio的“添加服务引用”功能尝试这样的事情时,生成的客户端不起作用。

它不起作用的原因是因为生成的客户端的app.config明显错误:当STS在“issuer”元素中时,没有自定义绑定的迹象。看看WSDL,这并不太令人惊讶,因为除了发行人地址之外,没有任何其他内容。

有没有办法让WCF向WSDL添加一些内容来描述这种情况?我的服务器的app.config绑定看起来没问题:“issuer”元素与工作客户端完全相同,包括自定义绑定的地址和详细信息。有谁知道为什么WCF在生成WSDL时似乎忽略了这一点?

0 个答案:

没有答案