• ベストアンサー

VB.net SOAPメッセージの取得方法

Webサービスを利用したプログラムを試行錯誤しながら作っています(なかなか進みません)。 以下の件、ご教授ください。 VB,netにて、Web参照を指定して作成したクライアント・アプリケーションで、SOAPの送受信をデバッグするために、Webメソッドを呼出したときのSOAPメッセージ(リクエストとレスポンス)のXMLテキストを画面に表示したいのですが、その取得方法がわからず困っています。 SOAPメッセージ(リクエストとレスポンス)のXMLテキストを取得する方法をご教授ください。 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

Soapのメッセージ/レスポンスはシリアライズ可能です。 個人で使用しているデバッグ用コードを張っておきます。 ※Class1.vb Public Class Class1  Public Shared Sub Main()   Dim l_service As New 《Webサービス型》   Dim l_msg As New 《Webサービスメッセージ型》   Dim l_res As 《Webサービスレスポンス型》 = l_service.Webコマンド(l_msg)   'レスポンスを保存する時   Libs.保存(l_res)   'シリアライズされたデータを読込む時(デバッグなどに使用)   l_res = Libs.読込(Of 《Webサービスレスポンス型》)()  End Sub End Class ※Libs.vb Imports System.IO Imports System.Xml.Serialization Public Class Libs  Public Shared Function 保存(ByVal p_res As Object) As Boolean   Return 保存(Of Object)(p_res)  End Function  Public Shared Function 保存(Of T)(ByVal p_res As T) As Boolean   Dim l_strPath As String = String.Empty   Return 保存(Of T)(p_res, l_strPath)  End Function  Public Shared Function 保存(Of T)(ByVal p_res As T, ByRef p_strPath As String) As Boolean   Dim l_strKey As String = GetType(T).FullName   Using l_dlgSave As New SaveFileDialog()    Dim l_strName As String = GetType(T).FullName & "_" & DateTime.Now.ToString("yyyyMMddHHmmss") & ".xml"    l_dlgSave.FileName = l_strName    l_dlgSave.Filter = "XMLファイル(*.xml)|*.xml|全て(*.*)|*.*"    l_dlgSave.Title = "保存先を指定してください"    If (l_dlgSave.ShowDialog() <> DialogResult.OK) Then     Return False    End If    p_strPath = l_dlgSave.FileName   End Using   'XmlSerializerオブジェクトを作成   'オブジェクトの型を指定する   Dim serializer As New XmlSerializer(p_res.GetType)   '書き込むファイルを開く   Using fs As New FileStream(p_strPath, FileMode.Create)    'シリアル化し、XMLファイルに保存する    serializer.Serialize(fs, p_res)    'ファイルを閉じる    fs.Close()   End Using   Return True  End Function  Public Shared Function 読込(Of T)() As T   Dim l_strKey As String = GetType(T).FullName   Dim l_strPath As String   Using l_dlgOpen As New OpenFileDialog()    Dim l_strName As String = GetType(T).FullName & "_" & DateTime.Now.ToString("yyyyMMddHHmmss") & ".xml"    l_dlgOpen.FileName = l_strName    l_dlgOpen.Filter = "XMLファイル(*.xml)|*.xml|全て(*.*)|*.*"    l_dlgOpen.Title = "取込先を指定してください"    If (l_dlgOpen.ShowDialog() <> DialogResult.OK) Then     Return Nothing    End If    l_strPath = l_dlgOpen.FileName   End Using   Dim l_objRet As T = Nothing   'XmlSerializerオブジェクトを作成   Dim serializer As New XmlSerializer(GetType(T))   '読み込むファイルを開く   Using fs As New FileStream(l_strPath, FileMode.Open)    'XMLファイルから読み込み、逆シリアル化する    l_objRet = CType(serializer.Deserialize(fs), T)    'ファイルを閉じる    fs.Close()   End Using   Return l_objRet  End Function End Class 出力内容のXML構造は、参考URLを参照してください。

参考URL:
http://www.atmarkit.co.jp/fxml/tanpatsu/21websvc/websvc02.html
kcm5t283_fuji
質問者

お礼

ご教授、感謝します。 なにぶん、スキルが初心者レベルですので、多少時間がかかると思いますが、このサンプルを元に、頑張ってみます。 本当にありがとうございました。

関連するQ&A

  • リクエストメッセージ、レスポンスメッセージを見る方法

    webサーバーとクライアントとのやりとりについて勉強したいと思い、リクエストメッセージとレスポンスメッセージを見るためにtelnetを利用してyahooなどへの接続を試みたのですが、telnetでの接続ができません。telnetで接続するには、どうしたらいいでしょうか?また、telnetを利用する以外でリクエストメッセージとレスポンスメッセージを見る方法はないでしょうか?よろしくお願いします。

  • VBデバッグ中にメッセージが...

    VBデバッグ中に「マクロが使用できません。セキュリティレベルが高に設定されています。...」或いは「このプロジェクシのマクロは無効に設定されています。マクロを有効にする方法については...」などのメッセージが出て、デバッグができなくなります。 一々OSの再起動からやり直します。何故このようになるのでしょうか。このようにならない方法があればご教示ください。

  • VB2008で曜日を取得する方法

    VB2008初心者ですがよろしいでしょうか 曜日の取得方法について教えて下さい ユーザーフォーム上の テキストボックスに、任意の生年月日を 入力し、ボタンをクリックした時に、生年月日 の曜日を取得したいのですが、可能でしょうか WeekdayName関数を使えばできるような感じですが 使い方が分かりません よろしくお願いします 1.テキストボックスに   2009-08-13   と入力しボタンをクリックする 2.メッセージボックスに   曜日を表示する

  • VB Script勉強中

    VB Script初心者です。 VB Scriptの記述で、xml.load(request)の部分が理解できないのでご教授お願いします。 特にload(request)のrequestが何をしているかがよく理解できません。 勉強不足で申し訳ないです。

  • VB6でEXCELの表をHTML形式で保存する方法は?

    VB6でEXCELのデータを作成してHTML形式で保存したいのですが、根本的にできないものでしょうか? EXCELのVBAではWebページで保存ということができるので試行錯誤してみたのですが VB6のヘルプでSaveAsメソッドを見る感じでは新しいファイル名までは指定できますが保存形式はEXCEL VBAのように指定できないようです。 XLSファイルの表までは完成できますが、そのXLSファイルをHTMLファイルにできればぃぃんです。 VB6からEXCELを制御してHTML形式で保存させるとか なにかいい方法はないでしょうか?

  • VB6で

    現在、VB5からVB6への移行作業をしています。 VB6でimComboというComboBoxコントロールを使用しているのですが、ある処理が終わると画面が初期化されこのComboBoxが何も選択されていない状態したいのですが上手くいきません。。(Imputman7.0使用) PcCombo.selectindex = -1 や PcCombo.Value ="" や PcCombo.Text = VbNullString や PcCombo.Text ="" など試行錯誤してみたのですがダメです。。 分かる方よろしくお願いします。

  • VB.NETにてDB2のBLOB型のデータを取得したい

    質問させてください。 現在、VB.Net2005にてDB2 V5からデータを取得して OracleにInsertしようと試みているのですが、 DB2からBLOB型の列のデータを取得しようとすると、 エラーが発生して取得できず困っています。 BLOB型以外の列に関しては取得できています。 VB.NetからのDB2への接続は、ODBCにて行っています。 デバッグにて、エラーが発生している場所は、 データアダプタでFillメソッドを実行している箇所です。 上記の現象に、お心当りの方はお知恵をお貸し下さい。 よろしくお願いします。

  • SOAPの引数、返値をXMLで記述したい

    SOAP over HTTPを使ったクライアントサーバ間のインターフェース構築を求められています。 クライアントからのリクエスト、サーバからのレスポンスは、情報量が多いためXMLで記述したいと考えているのですが、通常の文字列としてはちゃんと送受信できず、困っています。 具体的には下記の通りです。 (実際に試したものより単純化しています) サーバはjax-wsを利用して下記のように、ただ単にリクエストをエコーするメソッドを公開しました。 ・エンドポイントはhttp://localhost:8080/hello ・namespaceはhttp://jax-test/ @WebService public class Hello { @WebMethod public String echo( String name ) throws Exception { return name; } } クライアントから下記のような形でリクエストを送信しました。 前後のコードは省略しています。 引数はarg0タグで囲まれた "<test>パラメータ</test>" です。 当然返値は "<test>パラメータ</test>" を期待しています。 // Sourceオブジェクトの作成 String request ="<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" + "<ns:echo xmlns:ns=\"http://jax_test/\">" + "<arg0><test>パラメータ</test></arg0>" + "</ns:echo>"; Source requestMessage   = new StreamSource(new StringReader(request)); // Web サービスの実行 Source resultMessage = dispatch.invoke(requestMessage); 返ってきたSOAPオブジェクトのreturnタグ内のデータは空文字です。 サーバのechoメソッドにブレークポイントをかけて引数を確認したところこちらも空文字でした。 そこで、 + "<arg0><test>パラメータ</test></arg0>" を + "<arg0>&lt;test&gt;パラメータ&lt;/test&gt;</arg0>" と変更して実行してところ echoメソッドの引数は "<test>パラメータ</test>" であることを確認できましたが、 返ってきたSOAPオブジェクトのreturnタグ内のデータは "&lt;test&gt;パラメータ&lt;/test&gt;" となっていました。 これは、こういう仕様なんでしょうか? こういうもんだと割り切って、仕様設計すれば問題なくシステム構築は可能なのですが、何か腑に落ちません。 XMLデータを引数、返値で使う場合、別途ファイルを作りそのURLを送ったり、添付ファイルにするとか、いろいろと考えられるのですが、どのような形が望ましいのでしょうか? いい知恵がございましたら、お教えください。

    • ベストアンサー
    • Java
  • VBでRegisterWindowMessage関数を利用したメッセージの取得 2

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=1042889 の質問者の方と同じことで悩んでおります。 ---回答引用--- (1)VB側のウインドウハンドル(Me.hWnd)をAPIに渡す。 (2)RegisterWindowMessage("キーワード")でメッセージIDを取得する。 (3)VB側のウインドウをサブクラス化して、(2)のメッセージIDをフックする。 -------------- ということなのですが、 (1)は解決できたと思います。 (2)で、メッセージIDを取得する方法で悩んでいます。 "キーワード"は任意の文字列でいいのでしょうか? APIを使用するのが初めてで、いろいろ調べたのですが、なかなか理解できないで困っております。 APIについておすすめのURLでもよいので教えていただけますでしょうか?

  • VB2005でBASP21が使えません

    BASP21のFORMメソッドを使用し、次のような構文でHTMLのタグを読もうとしています。 dim a, b, obj as Object set obj = Createobject("basp21") a = Request.TotalBytes b = Request.BinaryRead(a) str = obj.Form(b,"name") 同じようなコーディングでVB6.0ではタグ<name>の文字列が取得出来て、VB2005では出来ません。 VB2005のコーディングが違うのでしょうか。