RequestSecurityTokenResponse no se deserializará
Frecuentes
Visto 1,104 veces
1
Tengo un cliente WCF que se conecta a un servidor STS, sobre el cual no tengo ningún control (es un servicio PHP de terceros).
Después de días de investigación, logré hablar con el servidor de una manera que acepta usar puramente WCF. Por supuesto, hubiera sido fácil simplemente poner algunos caracteres en la red, ignorando todo el material de SOAP. Pero al final logré adivinar todos los parámetros de configuración correctamente, por lo que el servicio STS responde a mi solicitud de esta manera
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
<Body>
<RequestSecurityTokenResponse xmlns="http://schemas.xmlsoap.org/ws/2005/02/trust">
<TokenType>http://schemas.xmlsoap.org/ws/2005/02/sc/sct</TokenType>
<RequestedSecurityToken>
<SecurityContextToken xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<Identifier>bipro:D5J9M0...</Identifier>
</SecurityContextToken>
</RequestedSecurityToken>
</RequestSecurityTokenResponse>
</Body>
</Envelope>
Pero ahora tengo problemas para extraer el valor del identificador. Para mi clase de proxy (SecurityTokenServicePortTypeClient : ClientBase<SecurityTokenServicePortType>, SecurityTokenServicePortType
) Probé todas las combinaciones imaginables de ServiceContract
, DataContract
y XmlSerialization
sobre todos los tipos. Pero todo lo que obtengo es null
.
La interfaz (muy modificada) para el contrato de servicio se ve así
[ServiceContract(Namespace = "http://schemas.xmlsoap.org/ws/2005/02/trust")]
public interface SecurityTokenServicePortType {
[OperationContract(Action = "urn:RequestSecurityToken", ReplyAction = "*")]
object RequestSecurityToken();
}
La clase de implementación (muy modificada) tiene un método como este
object SecurityTokenServicePortType.RequestSecurityToken() {
var x = base.Channel.RequestSecurityToken();
return x;
}
x es siempre null
.
En lugar de un tipo de retorno de object
fue originalmente RequestSecurityTokenResponse
y así sucesivamente.
Tuve el mismo problema con WSE hace años y pude resolverlo simplemente usando la combinación correcta de, por ejemplo XmlElementAttribute
para controlar el proceso de deserialización. Pero esta vez no parece ayudar.
Gracias por cualquier consejo!
Björn
0 Respuestas
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas c# wcf deserialization sts-securitytokenservice servicecontract or haz tu propia pregunta.