0

BizTalkServer2010とWCF-WSHttpアダプターを使用してWebサービスを呼び出しています。WebサービスはHTTPSで公開されており、証明書で署名されたWS-Securityを使用して要求を送信する必要があります。

アダプターの構成は次のとおりです。

一般->トランスポート->タイプ:WCF-WSHttp

WCF-WSHttpプロパティ:

一般->アドレス:httpsサービスエンドポイント。

一般->セキュリティ->セキュリティモード:TransportWithMessageCredential

[一般]->[セキュリティ]->[メッセージセキュリティ]->[メッセージクライアント]資格情報の種類:証明書

一般->セキュリティ->メッセージセキュリティ->アルゴリズムスイート:256

一般->セキュリティ->サービス資格情報のネゴシエーション:はい

一般->セキュリティ->セキュリティコンテキストの確立:はい

[一般]->[セキュリティ]->[クライアント証明書]->[ThumbPrint]:メッセージの署名に使用される証明書。

[全般]タブの[SOAPアクションヘッダー]テキストボックスには何も入力しません。

サービスを呼び出すと、次のエラーメッセージが表示されます。

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メッセージではないか、署名されていません)。

誰かが私を助けてもらえますか?

4

1 に答える 1

0

翻訳に基づくと、送信されているコンテンツ タイプが、宛先サービスが期待するものに対して正しくないようです。Apache Axis サービスを呼び出しているように見えるため、Apache からの応答の処理を処理するエンドポイント動作を構築する必要がある場合があります。他のスレッドでは、宛先サービスが WCF ではないために、送信される内容をカスタマイズする必要があると聞いています。

于 2012-03-15T02:17:41.943 に答える