2010-06-03 17 views
14

Tengo el servicio WCF accesible a través de Internet que usa wsHttpBinding con el modo de seguridad de mensajes y las credenciales del nombre de usuario.¿Cómo utilizar el enlace personalizado en WCF y mantener el modo de seguridad de mensajes con las credenciales del nombre de usuario?

<bindings> 
    <wsHttpBinding> 
     <binding name="wsHttpEndpointBinding" messageEncoding="Mtom" maxReceivedMessageSize="104857600"> 
      <readerQuotas maxArrayLength="104857600"/> 
      <security mode="Message"> 
      <message clientCredentialType="UserName"/> 
      </security> 
     </binding> 
    </wsHttpBinding> 
</bindings> 

He descubierto que lleva demasiado tiempo transferir mis datos del cliente al servidor. He leído que puedo usar el modo CustomBinding y binaryEncoding para mi servicio.

Al igual que:

<bindings> 
    <customBindings> 
    <binding name="NetHttpBinding"> 
     <binaryMessageEncoding /> 
     <httpTransport /> 
    </binding> 
    </customBindings> 
<bindings> 

Pero aquí no hay ninguna mención acerca del modo de seguridad de los mensajes y el cliente tipo de credencial ...

¿Cómo podría utilizar el enlace personalizado con binaryEncoding y mantener el modo de seguridad de los mensajes con nombre de usuario credenciales del cliente?

+0

¿Alguna buena solución? – Kiquenet

Respuesta

1

Establezca secureConversationBootstrap en UserNameForSslNegotiated. Pruebe algo similar a la encuadernación a continuación.

<bindings> 
<customBinding> 
    <binding name="wss-username-binary"> 
    <transactionFlow/> 

    <security 
authenticationMode="SecureConversation" 
messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10"> 

     <secureConversationBootstrap 
authenticationMode="UserNameForSslNegotiated" 
messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10" /> 
    </security> 

     <binaryMessageEncoding /> 
    <httpTransport/> 
    </binding> 
</customBinding> 
</bindings> 
-1

Pruebe esto, puede ser que le ayude más ---- tiene un enlace personalizado, seguridad personalizada y certificado.

  <endpoint address="mex" 
         binding="mexHttpBinding" 
         contract="IMetadataExchange" /> 

     </service> 

    </services> 
    <bindings> 
     <wsHttpBinding> 

      <binding name="CommonBinding" maxReceivedMessageSize ="2147483647"> 
       <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
           maxArrayLength="2147483647" maxBytesPerRead="2147483647" 
           maxNameTableCharCount="2147483647" /> 

       <security mode="Message"> 
        <message clientCredentialType="UserName" /> 
       </security> 
      </binding> 

     </wsHttpBinding> 
    </bindings> 
    <behaviors> 
     <serviceBehaviors> 
      <behavior name="myServiceBehavior"> 

       <serviceCredentials> 

        <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="Custom.Security.CustomUserNameValidator, Custom.Security" /> 
        <clientCertificate> 
         <authentication certificateValidationMode= "PeerOrChainTrust" /> 
        </clientCertificate> 
        <serviceCertificate findValue="CertName" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName" /> 
       </serviceCredentials> 

       <serviceMetadata httpGetEnabled="True"/> 
       <serviceAuthorization principalPermissionMode="Custom"> 
        <authorizationPolicies> 
         <add policyType="Custom.Security.AuthorizationPolicy, Custom.Security" /> 
        </authorizationPolicies> 
       </serviceAuthorization> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 
</system.serviceModel> 
2

Sé que esto no es la respuesta que buscas, pero esta es mi config. Uso el enlace personalizado con la autenticación UserNameOverTransport.

Puede darte una pista sobre qué cambiar para obtener el tuyo & ejecutándose.

<customBinding> 
    <binding name="MyCustomHttpBinding" receiveTimeout="00:20:00" sendTimeout="00:20:00"> 
     <security authenticationMode="UserNameOverTransport"> 
      <localServiceSettings maxClockSkew="Infinite" /> 
     </security> 
     <mtomMessageEncoding maxBufferSize="2097152" messageVersion="Soap12" > 
      <readerQuotas maxStringContentLength="2097152"/> 
     </mtomMessageEncoding> 
     <httpsTransport maxBufferSize="2097152" maxReceivedMessageSize="1073741824" transferMode="Streamed" /> 
    </binding> 
</customBinding> 

Tenga en cuenta que uso MTOM Encoding que, en mi caso, se ajusta mejor a mi situación.

Cuestiones relacionadas