Me gustaría convertir mi actual configuración de enlace HTTP/HTTPS WCF para usar codificación de mensaje binario y necesito hacerlo en código, no en XML configuración. AFAIK es necesario crear objetos CustomBinding y establecer los BindingElements adecuados, pero no puedo descifrar qué elementos debo usar en mi escenario.WCF: cómo crear un enlace programáticamente personalizado con codificación binaria a través de HTTP (S)
puntos principales en la configuración de mi WCF son:
- uso de HTTP o HTTPS transporte dependiendo de la configuración (en app.config)
- uso de seguridad de mensajes nombre de usuario
- TODO: añadir codificación binaria en lugar de por defecto texto
Mi código actual para el establecimiento de la unión hacia arriba (de trabajo, pero sin la codificación binaria):
var isHttps = Settings.Default.wcfServiceBaseAddress.StartsWith("https://", StringComparison.InvariantCultureIgnoreCase);
var binding = new WSHttpBinding(isHttps ? SecurityMode.TransportWithMessageCredential : SecurityMode.Message);
binding.Security.Message.ClientCredentialType = MessageCredentialType.UserName;
yo estaba tratando de este código, pero no funciona - no sé cómo configurar elemento de seguridad para el mensaje de seguridad de los mensajes nombre de usuario:
var custBinding = new CustomBinding();
custBinding.Elements.Add(new BinaryMessageEncodingBindingElement());
//Transport Security (Not Required)
if (isHttps)
{
custBinding.Elements.Add(SecurityBindingElement.CreateUserNameForSslBindingElement());
}
//Transport (Required)
custBinding.Elements.Add(isHttps ?
new HttpsTransportBindingElement() :
new HttpTransportBindingElement());
Alguien sabe cómo configurar esto? Traté de buscar un problema/solución similar, pero no lograba ...
ya he intentado esto , pero no funciona. Además, cuando isHttps == false no hay configuración de seguridad del mensaje: este es el problema principal. No sé cómo configurar seguridad de mensajes compatible con WSHttpBinding mediante CustomBinding. – Buthrakaur
Por razones de seguridad, WCF solo permite que se envíen combinaciones de nombre de usuario/contraseña cuando la conexión está encriptada, es decir, cuando usa el transporte Https. Esto significa que si no usa Https, no puede proteger sus mensajes de esta manera. Es posible que deba volver a evaluar sus requisitos. –