从非.NET客户端向WCF发送SOAP请求

时间:2014-10-27 17:02:40

标签: wcf soap authorization token

我有一个 WCF webservice ,如果我从 WPF客户端应用程序调用它,它不在同一台机器上,也不在同一个域中。客户端应用程序的 app.config 是:

 <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_IMyService" closeTimeout="00:05:00"
          openTimeout="00:05:00" receiveTimeout="00:10:00" sendTimeout="00:05:00"
          allowCookies="false" bypassProxyOnLocal="false" maxBufferPoolSize="1524288000"
          maxReceivedMessageSize="1524288000" useDefaultWebProxy="true">
          <readerQuotas maxDepth="2000" maxStringContentLength="819200" maxArrayLength="163840" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <security mode="TransportWithMessageCredential" />
        </binding>
      </basicHttpBinding>
    </bindings>

    <client>
      <endpoint address="https://my.service.com/MyService.svc"
        binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IMyService"
        contract="LicenseService.IMyService" name="BasicHttpBinding_IMyService" />
    </client>

在调用WCF服务后,我用 fiddler 嗅探SOAP信封,我修改时间戳,我在客户端复制/粘贴内容,例如Chrome Postman,我将请求发送到WCF我收到一个错误。下面是SOAP请求信封和给定的错误,这太过于通用,我无法在任何地方找到一个好的解决方案。我最好的猜测是它与WPF处理安全令牌的方式有关,但我找不到什么错误。令牌只能使用一次?有人可以帮忙吗?

错误讯息:

  

带有操作的消息&#39;&#39;由于EndpointDispatcher上的ContractFilter不匹配,无法在接收方处理。这可能是   因为合同不匹配(两者之间不匹配的行为)   发件人和收件人)或发件人之间的绑定/安全性不匹配   和接收器。检查发件人和收件人是否一样   合同和相同的约束(包括安全要求,例如   消息,传输,无)。

SOAP信封:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
  <s:Header>
    <o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
      <u:Timestamp u:Id="_0">
        <u:Created>2014-10-24T09:39:11.198Z</u:Created>
        <u:Expires>2014-10-24T09:44:11.198Z</u:Expires>
      </u:Timestamp>
      <o:UsernameToken u:Id="token">
        <o:Username>MyUsername</o:Username>
        <o:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">password</o:Password>
      </o:UsernameToken>
    </o:Security>
  </s:Header>
  <s:Body>
    <GetProduct xmlns="http://tempuri.org/">
      <productGuid>productGuid</productGuid>
    </GetProduct>
  </s:Body>
</s:Envelope>

1 个答案:

答案 0 :(得分:0)

WCF服务将CustomValidation与WS-Security一起使用。客户端不支持WS-Security,因此无法处理SOAP消息的头部。在客户端中,更多的WS令牌没有刷新,并且它已经被WCF服务

使用了