パートナーが提供するサービスを利用する必要があります。私はほとんど指示を受けませんでしたが、セキュリティは PasswordDigest であると言われました。調べてみると、すぐに WSE への言及がたくさんあったので、やめました。実装は非常に簡単で、すぐにメッセージの SOAP ヘッダーにある PasswordDigest を使用する標準の WSE ユーザー トークンを取得しました。
今日テストを開始したとき、(エラー メッセージによって) 状況が正しくないことがすぐにわかりました。結局のところ、パートナーは SOAP ヘッダーを調べず、http ヘッダーのセキュリティ情報を必要としています。
カスタム HTTP ヘッダーをプロキシ クラスに追加する方法に関する記事をたくさん見てきましたが、私のプロキシは、追加するヘッダー コレクションを持たない SoapHttpClientProtocol から継承しています。生の httpWebRequest を作成することを検討していましたが、処理する複雑なパラメーターを持つ特定のアクセス方法があります (それに加えて、バックワードに行くように感じます)。
GetWebRequest メソッドを持たないサービス プロキシ クラスにカスタム http ヘッダーを追加する最良の方法は何ですか?
参考のため:
プロキシ クラスの宣言:
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.3053")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name="MtomServiceSoap11", namespace="http://ws.xxxxxxx.com/")]
public partial class MtomServiceService : System.Web.Services.Protocols.SoapHttpClientProtocol {
呼び出す必要があるターゲット メソッド:
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Bare)]
[return: System.Xml.Serialization.XmlElementAttribute("uploadDocumentResponse", Namespace="http://ws.edsmtom.citizensfla.com/")]
public uploadDocumentResponse uploadDocument([System.Xml.Serialization.XmlElementAttribute(Namespace="http://ws.xxxxxxx.com/")] uploadDocumentRequest uploadDocumentRequest) {
object[] results = this.Invoke("uploadDocument", new object[] {
uploadDocumentRequest});
return ((uploadDocumentResponse)(results[0]));
}
}
サービスへの実際の呼び出しは単純です。渡されるオブジェクトは次のとおりです。
request.criteria = docCriteria;
request.document = document;
var result = service.uploadDocument(request);
ありがとう。