WebService:Java client + .NET WSE 2.0関連の問題解決策

2325 ワード

最近は他の単位で提供されるデータサービスの仕事をしていますが、単位によってクライアントが異なるため、WebService方式でデータインタフェースを提供することを考慮しています.セキュリティを向上させるため、WSEセキュリティ認証方式を採用しています.ただし、サーバの客観的な環境の制限を受けるため、使用するしかない.net framework 1.1+wse2.0 sp 3で行います(デバッグと問題の特定を容易にするために、サービス側にパケット切断ツールをインストールするか、入出力とフィードバックの詳細情報を開くことを学ぶことをお勧めします).ここでなぜwse 2なのか.0は後述する.クライアントの面では、C#クライアントとJavaクライアントをシミュレートし、発生したいくつかの問題に対していくつかの解決策を見つけました.ここで共有します.
        1.wse 1を使用します.0,javaクライアント呼び出し時にSOAPヘッダ情報が正しくないことを示す
もし.Netサービス側はwse 1を採用した.0である、かつ、UsernameTokenを用いて検証する場合、JavaクライアントからもUsernameToke情報がサービス側に伝達すると、「SOAP Headerが正しくない」というエラーが表示されるが、Netクライアントには何の問題もありません.これはWSE 2.0以上のバージョンを使用する理由です.
2.WSE 2を使用する.0,javaクライアントが呼び出すと、「NonceとCreatedがありません」ノードが表示されます.
この問題はjavaが伝達する過去のSOAP情報が不完全であるか、譲れないためである.NETサービス側識別.解決策の1つは、サービス側がSOAPに伝達された情報に2つのWSEノードを追加するか、次のようにします.
//  Nonce  

XmlNode node1 = doc.CreateNode(XmlNodeType.Element,"wsse:Nonce","http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");	

node1.Prefix = "wsse" ;

node1.InnerText = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(System.DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss.fffZ"))) ;

//  Created  

XmlNode node2 = doc.CreateNode(XmlNodeType.Element,"wsu:Created","http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");	

node2.Prefix = "wsu" ;

node2.InnerText = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ss.fffZ");

これらの情報をどこに追加するかについては、マイクロソフトのヘルプファイルでUsernameTokenManagerのLoadTokenFromXmlメソッドを見つけ、ここでSOAP情報をカスタマイズできます.
二つ目はJAVAクライアントに伝達されたSOAP情報を修正させることである.
3.その他のエラー
「詳細」の「エラー情報」と基本原理に基づいて、検索または自己改善を行います.
私はやっているうちに、多くの問題に遭遇したことがありますが、解決策は少なく、ほとんどが外国人で、answerもなく、いつも一部の情報に基づいて探して多くの時間を費やしました.まとめると、あまりにもいい加減で、間違った情報をよく見たり、その原理を考えたりしていないが、ネットで資料を探すことに頼っているだけで、結果は気に入らない.最後に、その仕事のメカニズムを見て考えてみると、そうすることができたことに気づきました.
怠惰で長い間書いていたので、忘れてしまったものがあるので、簡単に書いて、自分で検討しました.一応記録しておく