我有一个 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>
答案 0 :(得分:0)
WCF服务将CustomValidation与WS-Security一起使用。客户端不支持WS-Security,因此无法处理SOAP消息的头部。在客户端中,更多的WS令牌没有刷新,并且它已经被WCF服务
使用了