1

我有一个连接到 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可以想象的组合。但我得到的只是。ServiceContractDataContractXmlSerializationnull

服务合同的(大量修改的)接口看起来像这样

[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控制反序列化过程。但这一次似乎没有帮助。

感谢您的任何建议!

比约恩

4

0 回答 0