我有一个连接到 STS 服务器的 WCF 客户端,我无法控制它(它是第 3 方 PHP 服务)。
经过几天的研究,我设法以它接受的方式与服务器交谈,使用纯 WCF。当然,将一些字符放到网络上会很容易,而忽略所有 SOAP 内容。但最后我设法猜对了每个配置参数,所以 STS 服务这样回答我的请求
<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>
但是现在我无法提取标识符值。对于我的代理类 ( ),我尝试了所有类型的,和的所有SecurityTokenServicePortTypeClient : ClientBase<SecurityTokenServicePortType>, SecurityTokenServicePortType
可以想象的组合。但我得到的只是。ServiceContract
DataContract
XmlSerialization
null
服务合同的(大量修改的)接口看起来像这样
[ServiceContract(Namespace = "http://schemas.xmlsoap.org/ws/2005/02/trust")]
public interface SecurityTokenServicePortType {
[OperationContract(Action = "urn:RequestSecurityToken", ReplyAction = "*")]
object RequestSecurityToken();
}
(大量修改的)实现类有这样的方法
object SecurityTokenServicePortType.RequestSecurityToken() {
var x = base.Channel.RequestSecurityToken();
return x;
}
x 总是null
。
而不是它的返回类型object
最初是RequestSecurityTokenResponse
等等。
几年前我在 WSE 上遇到过同样的问题,我能够通过使用正确的组合来解决这个问题,例如XmlElementAttribute
控制反序列化过程。但这一次似乎没有帮助。
感谢您的任何建议!
比约恩