サード パーティの SOAP サービスに接続する必要があり、そのために WCF を使用しています。このサービスは Apache AXIS を使用して開発されたものであり、私たちはそれを制御することはできず、その動作を変更する影響力もありません。私たちが見ている問題は、要求が Web Services Security を使用してフォーマットされることを期待しているため、すべての正しい署名などを行っていることです。ただし、サードパーティからの応答は保護されていません。ワイヤーを盗聴すると、応答が正常に返されることがわかります (ただし、タイムスタンプや署名などはありません)。基礎となる .NET コンポーネントは、これをセキュリティ上の問題と見なすため、エラーとしてスローします。そのため、soap 応答を実際に受け取ることはありません。セキュリティで保護された要求を送信するために WCF フレームワークを構成する方法はありますが、応答にセキュリティ フィールドを期待しないでください。OASIS の仕様を見ると、そうではありません。
詳細については、次の例外があります。
受け取る例外は次のとおりです。
System.ServiceModel.Security.MessageSecurityException was caught
Message="Security processor was unable to find a security header in the message. This might be because the message is an unsecured fault or because there is a binding mismatch between the communicating parties. This can occur if the service is configured for security and the client is not using security."
Source="mscorlib"
StackTrace:
Server stack trace:
at System.ServiceModel.Security.TransportSecurityProtocol.VerifyIncomingMessageCore(Message& message, TimeSpan timeout)
at System.ServiceModel.Security.TransportSecurityProtocol.VerifyIncomingMessage(Message& message, TimeSpan timeout)
at System.ServiceModel.Security.SecurityProtocol.VerifyIncomingMessage(Message& message, TimeSpan timeout, SecurityProtocolCorrelationState[] correlationStates)
at System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.ProcessReply(Message reply, SecurityProtocolCorrelationState correlationState, TimeSpan timeout)
at System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
ちなみに、タイムスタンプを省略した場合、セキュリティ フィールドは想定されないという投稿をたくさん見てきました。これはオプションではありません - 私たちが通信しているサービスは、タイムスタンプを義務付けています。