我使用BizTalk Server 2010和WCF-WSHttp适配器调用Web服务。 Web服务在HTTPS上发布,并且必须使用使用证书签名的WS-Security发送请求。
这些是适配器配置:
一般 - >运输 - >键入:WCF-WSHttp
WCF-WSHttp属性:
一般 - >地址:https服务终点。
一般 - >安全 - >安全模式:TransportWithMessageCredential
一般 - >安全 - >消息安全 - >邮件客户端凭据类型:证书
一般 - >安全 - >消息安全 - > Algoritm套房:256
一般 - >安全 - >谈判服务凭证:是的
一般 - >安全 - >建立安全背景:是
一般 - >安全 - >客户证书 - > ThumbPrint:用于签署消息的证书。
我没有在General选项卡的SOAP Action Header文本框中放置任何内容。
当我调用该服务时,我收到以下错误消息:
An error occurred while processing the message, refer to the details section for more information
Message ID: {A3234833-0453-4DCA-BB9C-7AAA9A865B90}
Instance ID: {54417DE1-3E08-4AB4-8BE2-B5565650ECFF}
Error Description: System.ServiceModel.ProtocolException: El tipo de contenido text/xml;charset=utf-8 del mensaje de respuesta no coincide con el tipo de contenido del enlace (application/soap+xml; charset=utf-8). Si usa un codificador personalizado, asegurese de que el método IsContentTypeSupported se implemente correctamente. Los primeros 553 bytes de la respuesta fueron: '<?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<soapenv:Fault>
<faultcode xmlns:ns1="http://xml.apache.org/axis/">ns1:Client.NoSOAPAction</faultcode>
<faultstring>no SOAPAction header!</faultstring>
<detail>
<ns2:hostname xmlns:ns2="http://xml.apache.org/axis/">zefdesw02</ns2:hostname>
</detail>
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>'. ---> System.Net.WebException: Error en el servidor remoto: (500) Error interno del servidor.
en System.Net.HttpWebRequest.GetResponse()
en System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
--- Fin del seguimiento de la pila de la excepción interna ---
Server stack trace:
en System.ServiceModel.Security.IssuanceTokenProviderBase`1.DoNegotiation(TimeSpan timeout)
en System.ServiceModel.Security.SspiNegotiationTokenProvider.OnOpen(TimeSpan timeout)
en System.ServiceModel.Security.TlsnegoTokenProvider.OnOpen(TimeSpan timeout)
en System.ServiceModel.Security.WrapperSecurityCommunicationObject.OnOpen(TimeSpan timeout)
en System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
en System.ServiceModel.Security.CommunicationObjectSecurityTokenProvider.Open(TimeSpan timeout)
en System.ServiceModel.Security.SymmetricSecurityProtocol.OnOpen(TimeSpan timeout)
en System.ServiceModel.Security.WrapperSecurityCommunicationObject.OnOpen(TimeSpan timeout)
en System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
en System.ServiceModel.Channels.SecurityChannelFactory`1.ClientSecurityChannel`1.OnOpen(TimeSpan timeout)
en System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
en System.ServiceModel.Security.SecuritySessionSecurityTokenProvider.DoOperation(SecuritySessionOperation operation, EndpointAddress target, Uri via, SecurityToken currentToken, TimeSpan timeout)
en System.ServiceModel.Security.SecuritySessionSecurityTokenProvider.GetTokenCore(TimeSpan timeout)
en System.IdentityModel.Selectors.SecurityTokenProvider.GetToken(TimeSpan timeout)
en System.ServiceModel.Security.SecuritySessionClientSettings`1.ClientSecuritySessionChannel.OnOpen(TimeSpan timeout)
en System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
en System.ServiceModel.Channels.ServiceChannel.OnOpen(TimeSpan timeout)
en System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
en System.ServiceModel.Channels.CommunicationObject.Open()
Exception rethrown at [0]:
en System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
en System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
en System.ServiceModel.ICommunicationObject.Open()
en Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfClient`2.GetChannel[TChannel](IBaseMessage bizTalkMessage, ChannelFactory`1& cachedFactory)
en Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfClient`2.SendMessage(IBaseMessage bizTalkMessage)
远程服务器似乎不理解SOAP客户端消息,或者SOAP消息格式不正确(它不是SOAP消息或者没有被注册)。
有人可以帮助我吗?
答案 0 :(得分:0)
根据翻译,发送的内容类型与目标服务所期望的内容类似。看起来您正在调用Apache Axis服务,因此您可能需要构建端点行为来处理来自Apache的响应处理。在其他线程上,我听说有人需要自定义发送的内容,因为目标服务不是WCF。