SOAPヘッダーにXMLデータを挿入したいです。。。 #6
Answered
by
callmekohei
callmekohei
asked this question in
質問
-
|
下記分よければご教授いただければありがたいです💦 どんな情報でも結構です。 宜しくおねがいします したいことSOAPヘッダーにXMLデータを挿入したい Before(現状)<s:Envelope ...>
<s:Header>
<m:Header xmlns="http://foo">
<m:Header xmlns:m="http://foo">
<m:foo>hoge</m:foo>
<m:bar>fuga</m:bar>
<m:baz>piyo</m:baz>
</m:Header>
</m:Header>
</s:Header>
<s:Body ...>
<!-- somthing -->
</s:Body>
</s:Envelope>After(こうしたい)<s:Envelope ...>
<s:Header>
<m:Header xmlns:m="http://foo">
<m:foo>hoge</m:foo>
<m:bar>fuga</m:bar>
<m:baz>piyo</m:baz>
</m:Header>
</s:Header>
<s:Body ...>
<!-- somthing -->
</s:Body>
</s:Envelope>環境コードの概要open FSharp.Data
open System.ServiceModel
open System.ServiceModel.Channels
open System.Security.Cryptography.X509Certificates
open System.Linq
open System.Xml.Linq
open System.Xml
module myMain =
[<Literal>]
let WSDL = """xxx.wsdl"""
type MyService = WsdlProvider<WSDL>
let testURL = """https://xxx"""
do
// 通信設定
let tempBinding = new WSHttpBinding()
tempBinding.Security.Mode <- SecurityMode.Transport
tempBinding.Security.Transport.ClientCredentialType <- HttpClientCredentialType.Certificate
tempBinding.MessageEncoding <- WSMessageEncoding.Mtom
use client = new MyService.Client(tempBinding, EndpointAddress(testURL))
// セキュリティ設定(省略)
// --------------------------------------------
// SOAPヘッダーを追加する
// --------------------------------------------
// スコープを作成
use _ = new OperationContextScope(client.InnerChannel)
// ★xmlデータを作成
let ns:XNamespace = "http://xxx" |> XNamespace.op_Implicit
let headerXML = new XElement(ns + "Header",
new XAttribute(XNamespace.Xmlns + "m", ns.NamespaceName),
new XElement(ns + "foo", "hoge")
, new XElement(ns + "bar", "huga")
, new XElement(ns + "baz", "piyo")
)
// ヘッダを作成
let messageHeader = MessageHeader.CreateHeader( @"m:" + "Header" , ns.NamespaceName , headerXML , false)
// ヘッダを挿入
OperationContext.Current.OutgoingMessageHeaders.Add(messageHeader)
// データ取得
client.aaa bar
|> printfn "%A"上記コードの『★xmlデータを作成』をSOAPヘッダーに挿入できることが目標です 現在わかっていることとして・・・その1MessageHeader.CreateHeaderを使用する場合は を使用するのかな?と思ってます その2
|
Beta Was this translation helpful? Give feedback.
Answered by
callmekohei
May 21, 2022
Replies: 1 comment
-
解決しました(。・ω・。)ノ下記のブログを参照にやってみたところ解決しました! 書いたコード
// MessageHederクラスをいじってカスタムヘッダーを作成
type CustomeHeader () as this =
inherit MessageHeader()
override this.Name = "Header"
override this.Namespace = "http://foo"
override this.OnWriteStartHeader(writer : XmlDictionaryWriter, messageVersion:MessageVersion) =
writer.WriteStartElement("m", this.Name, this.Namespace);
this.WriteHeaderAttributes(writer, messageVersion);
override this.OnWriteHeaderContents(writer :XmlDictionaryWriter, messageVersion:MessageVersion) =
writer.WriteStartElement("m:foo")
writer.WriteString("hoge")
writer.WriteEndElement()
writer.WriteStartElement("m:bar")
writer.WriteString("fuga")
writer.WriteEndElement()
// 上記で作成したヘッダーを送信データに追記する
OperationContext.Current.OutgoingMessageHeaders.Add(new CustomHeader())お騒がせしました💦 |
Beta Was this translation helpful? Give feedback.
0 replies
Answer selected by
callmekohei
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
解決しました(。・ω・。)ノ
下記のブログを参照にやってみたところ解決しました!
書いたコード