Переписать привязку WCF из app.config к коду

Я пытаюсь переписать пользовательскую привязку WCF из app.config к коду.

App.config

<customBinding>
  <binding name="cb">
    <security defaultAlgorithmSuite="Default"
              authenticationMode="IssuedTokenOverTransport"
              requireDerivedKeys="true"
              includeTimestamp="true"
              messageSecurityVersion="WSSecurity11WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10">
      <issuedTokenParameters keyType="BearerKey"
                             tokenType="http://docs.oasis-open.org/ws/oasis-wss-saml-token-profile-1.1#SAMLV2.0">
        <additionalRequestParameters>
          <trust:SecondaryParameters xmlns:trust="http://docs.oasis-open.org/ws-sx/ws-trust/200512">
            <trust:TokenType xmlns:trust="http://docs.oasis-open.org/ws-sx/ws-trust/200512">http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV2.0</trust:TokenType>
            <trust:KeyType xmlns:trust="http://docs.oasis-open.org/ws-sx/ws-trust/200512">http://docs.oasis-open.org/ws-sx/ws-trust/200512/Bearer</trust:KeyType>
          </trust:SecondaryParameters>
        </additionalRequestParameters>
        <issuer address="xxx" />
      </issuedTokenParameters>
      <localClientSettings detectReplays="false" />
      <localServiceSettings detectReplays="false" />
    </security>
    <textMessageEncoding messageVersion="Soap12" />
    <httpsTransport />
  </binding>
</customBinding>

Код:

var binding = new CustomBinding();

var issuedTokenParameters = new IssuedSecurityTokenParameters();
issuedTokenParameters.KeyType = SecurityKeyType.BearerKey;
issuedTokenParameters.TokenType = "http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV2.0";

XNamespace trust = "http://docs.oasis-open.org/ws-sx/ws-trust/200512";

var secondaryParameters = new XElement(trust + "SecondaryParameters",
                                       new XElement(trust + "TokenType") { Value = "http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV2.0" },
                                       new XElement(trust + "KeyType") { Value = "http://docs.oasis-open.org/ws-sx/ws-trust/200512/Bearer" });
issuedTokenParameters.AdditionalRequestParameters.Add(secondaryParameters.ToXmlElement());

issuedTokenParameters.IssuerAddress = new EndpointAddress("XXX");

var securityElement = SecurityBindingElement.CreateIssuedTokenOverTransportBindingElement(issuedTokenParameters);

securityElement.DefaultAlgorithmSuite = SecurityAlgorithmSuite.Default;
securityElement.IncludeTimestamp = true;
securityElement.MessageSecurityVersion = MessageSecurityVersion.WSSecurity11WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10;
securityElement.LocalClientSettings.DetectReplays = false;
securityElement.LocalServiceSettings.DetectReplays = false;

binding.Elements.Add(securityElement);
binding.Elements.Add(new TextMessageEncodingBindingElement());
binding.Elements.Add(new HttpsTransportBindingElement());

return binding;

Привязка кода не подходит, потому что когда я звоню в сервис, я получаю сообщение об ошибке:

System.ServiceModel.FaultException: сообщение с действием '' не может быть обработано в получателе из-за несоответствия ContractFilter в EndpointDispatcher. Это может быть связано либо с несоответствием контракта (несовпадение действий между отправителем и получателем), либо с несоответствием привязки / безопасности между отправителем и получателем. Убедитесь, что отправитель и получатель имеют один и тот же контракт и одну и ту же привязку (включая требования безопасности, например, Сообщение, Транспорт, Нет).

Любой совет? Я не могу найти то, что неправильно или отсутствует в привязке кода.

0 ответов

Другие вопросы по тегам