SOAPクライアント
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
] [
Twitter
]
開始行:
→ASP.NETでのWebサービス開発に関するメモ
→WebAPI関連
#contents
*JavaScript(Ajax)で作る場合 [#ueb3bc91]
→ASP.NET AJAX関連
-[[Call SOAP Web services with Ajax part1>http://www.ibm....
-[[同 part 2>http://www.ibm.com/developerworks/jp/webserv...
*.NETで作る場合 [#se6cbdd3]
-WSDL.exeでプロキシクラスを作るやり方
wsdl.exe <オプション> <URL またはパス> <URL またはパス> ...
--WSDLの内容を見てクライアント側プロキシクラスを生成して...
--そのプロキシクラスを使えばクライアント側は簡単に作れる
--ただしC#,VB.NET, JavaScript, Visual J#のいずれか
--WSDL.EXEはVisual Studio用のコマンドプロンプトから実行可能
-Visual StudioからWeb参照するやり方
--IDEでプロジェクトの参照でWeb参照をするとプロキシクラス...
--サービスの名前がHogeとしたら、「SvcHoge」というような名...
--サービスのURLが変わった場合はSvcHoge.Urlを書き換えれば...
--サービスの引数などが変更になったときはWeb参照をやり直す...
--使用プロトコルは'SOAP'、'SOAP12'、'HttpGet'、'HttpPost'...
*VBで作る場合 [#v82ef3a4]
-以下の方法がある
--PocketSOAPを使う
--MS SOAP Toolkitを使う
---VBからMicrosoft SOAP Type Library 3.0を参照する
*PocketSoap [#w81a7f05]
-[[PocketSoap>http://www.pocketsoap.com/pocketsoap/]]
-[[PocketSoap用Proxyジェネレータ>http://www.pocketsoap.co...
-ASP.NETのWebサービスに引数を送っても無視される問題
--[[FAQの"Why does my .NET webservice ignore the data I s...
Set the EncodingStyle to ""
Specify the namespace URI for all the parameters.
--要するに、ネームスペースをちゃんと指定しないと引数を無...
*MS SOAP Toolkitについて [#p946a02f]
-[[Downloadページ>http://msdn.microsoft.com/webservices/w...
**SoapClient30オブジェクト [#n1fd0dae]
-以下のオブジェクトに依存する
--SoapSerializer30
--SoapReader30
--WSDLReader30
--WSDLOperation30
**WSDL Generator [#ze50a13a]
-プロキシコードのジェネレータではなく、WSDLそのもののジェ...
**Trace ユーティリティ [#qc22cf5a]
-IISサーバの待ちうけポートをIISマネージャから8080などに変...
--※POPFileなどを使っていると既にポート8080が使われている...
-File -> New -> Formated Traceなどでユーティリティのデス...
-Formatedというのは、HTTPヘッダを切り離して表示するかどう...
-最低限の機能という感じで、あまり使いやすいものではない
**サンプル [#we1ff313]
'---------------------------------
' High Level APIで実際に動かしてみたサンプル
'---------------------------------
Private Sub cmdTest_Click()
Dim sc As SoapClient30
Set sc = New SoapClient30
Call sc.MSSoapInit("http://localhost/Test/SrvTst.asmx...
Dim s As String
Dim a As String
Dim b As String
a = tbA.Text
b = tbB.Text
s = sc.Test2(a, b)
MsgBox (s)
lblC.Caption = sc.GetVal()
End Sub
**タイムアウトの設定 [#p1c884b4]
-Timeout値(処理終了の待ち時間)の変更は以下のようにやる
Dim sc As SoapClient30
Set sc = New SoapClient30
'サーバのURLにあわせる
Call sc.MSSoapInit(wsdlURL)
sc.ConnectorProperty("Timeout") = 90000 'ms単位。デフォ...
-MSSoapInit()を処理した後にやること。
-Webサーバ側のタイムアウト設定も合わせてやっておくこと(II...
-ConnectTimeoutプロパティはサーバへの接続を待つ時間のタイ...
**ユーザ定義した型を引数や戻り値で扱うには? [#j89950b4]
-以下の方法がある
-Type Mapperなるものを使う
--COM オブジェクトとしてマップする
--Type Mapperにはさらに種類がある
---Generic Type Mapper
・UDT(User Designed Type) Mapper
・COMではなくUserDefined dataを使いたい場合
・Custom Type Mapper
・双方向リストやグラフを使う場合
・elementではなくattributeを読み書きしたい場合
・マッピングが1対1対応しない場合
-IXMLDOMNodeList parameterを使う(こっちの方が楽だと思う)
--DOMとしてマップする
---COMを使いたくない場合
--Microsoft XML, v4.0以上を参照設定する必要あり
**ユーザ定義型を引数として渡すとき [#o98f9b9d]
-このような型をパラメータとして渡したいとき
//注意:Webサービスの引数に使うクラスにはデフォルトコン...
public class PrmCircle
{
public double Lat;
public double Lon;
public double Rad;
public PrmSyokenCircle()
{
Lat = 0;
Lon = 0;
Rad = 0;
}
}
-VBでの渡し方
Dim sc As SoapClient30
Set sc = New SoapClient30
'SOAP Client初期化
Call sc.MSSoapInit(wsdlURL)
Dim dom As New DOMDocument30
Dim list As IXMLDOMNodeList
Dim elm As IXMLDOMElement
Set dom.documentElement = dom.createElement("PrmCircl...
Set elm = dom.createElement("Lat")
elm.Text = "0.1"
Call dom.documentElement.appendChild(elm)
Set elm = dom.createElement("Lon")
elm.Text = "0.2"
Call dom.documentElement.appendChild(elm)
Set elm = dom.createElement("Rad")
elm.Text = "1.0"
Call dom.documentElement.appendChild(elm)
Set list = dom.documentElement.childNodes
Dim lists(0) As IXMLDOMNodeList
Set lists(0) = list
Dim ret As IXMLDOMNodeList
Set ret = sc.HogeCall(lists)
**ユーザ定義型の中で配列を使うには [#ia1a9484]
-パラメータとなる型のメンバはなぜか1つだけでは実行時エラ...
-パラメータがこのような場合
public class PrmPoint
{
public double Lat;
public double Lon;
}
public class PrmPolygon
{
public int Cnt; <-- このような場合、メンバが2つ以上...
public PrmPoint[] Pnts;
public PrmPolygon()
{
Pnts = null;
}
}
-クライアント側の例
Dim sc As SoapClient30
Set sc = New SoapClient30
'SOAP Client初期化
Call sc.MSSoapInit(wsdlURL)
Dim dom As New DOMDocument26
Dim list As IXMLDOMNodeList
Dim elm As IXMLDOMElement
Dim Pnts As IXMLDOMElement
Dim pnt As IXMLDOMElement
Dim lists(1) As IXMLDOMNodeList
Set dom.documentElement = dom.createElement("PrmPolyg...
Set elm = dom.createElement("Cnt")
elm.Text = "0"
Call dom.documentElement.appendChild(elm)
Set Pnts = dom.createElement("Pnts")
Set pnt = dom.createElement("PrmPoint")
Set elm = dom.createElement("Lat")
elm.Text = "0.1"
Call pnt.appendChild(elm)
Set elm = dom.createElement("Lon")
elm.Text = "0.2"
Call pnt.appendChild(elm)
Call Pnts.appendChild(pnt)
Set pnt = dom.createElement("PrmPoint")
Set elm = dom.createElement("Lat")
elm.Text = "0.3"
Call pnt.appendChild(elm)
Set elm = dom.createElement("Lon")
elm.Text = "0.4"
Call pnt.appendChild(elm)
Call Pnts.appendChild(pnt)
Call dom.documentElement.appendChild(Pnts)
Set list = dom.documentElement.childNodes
Set lists(0) = list
Set dom.documentElement = dom.createElement("PrmPolyg...
Set elm = dom.createElement("Cnt")
elm.Text = "1"
Call dom.documentElement.appendChild(elm)
Set Pnts = dom.createElement("Pnts")
Set pnt = dom.createElement("PrmPoint")
Set elm = dom.createElement("Lat")
elm.Text = "0.5"
Call pnt.appendChild(elm)
Set elm = dom.createElement("Lon")
elm.Text = "0.6"
Call pnt.appendChild(elm)
Call Pnts.appendChild(pnt)
Set pnt = dom.createElement("PrmPoint")
Set elm = dom.createElement("Lat")
elm.Text = "0.7"
Call pnt.appendChild(elm)
Set elm = dom.createElement("Lon")
elm.Text = "0.8"
Call pnt.appendChild(elm)
Call Pnts.appendChild(pnt)
Call dom.documentElement.appendChild(Pnts)
Set list = dom.documentElement.childNodes
Set lists(1) = list
Dim ret As IXMLDOMNodeList
Set ret = sc.HogeCall(lists)
終了行:
→ASP.NETでのWebサービス開発に関するメモ
→WebAPI関連
#contents
*JavaScript(Ajax)で作る場合 [#ueb3bc91]
→ASP.NET AJAX関連
-[[Call SOAP Web services with Ajax part1>http://www.ibm....
-[[同 part 2>http://www.ibm.com/developerworks/jp/webserv...
*.NETで作る場合 [#se6cbdd3]
-WSDL.exeでプロキシクラスを作るやり方
wsdl.exe <オプション> <URL またはパス> <URL またはパス> ...
--WSDLの内容を見てクライアント側プロキシクラスを生成して...
--そのプロキシクラスを使えばクライアント側は簡単に作れる
--ただしC#,VB.NET, JavaScript, Visual J#のいずれか
--WSDL.EXEはVisual Studio用のコマンドプロンプトから実行可能
-Visual StudioからWeb参照するやり方
--IDEでプロジェクトの参照でWeb参照をするとプロキシクラス...
--サービスの名前がHogeとしたら、「SvcHoge」というような名...
--サービスのURLが変わった場合はSvcHoge.Urlを書き換えれば...
--サービスの引数などが変更になったときはWeb参照をやり直す...
--使用プロトコルは'SOAP'、'SOAP12'、'HttpGet'、'HttpPost'...
*VBで作る場合 [#v82ef3a4]
-以下の方法がある
--PocketSOAPを使う
--MS SOAP Toolkitを使う
---VBからMicrosoft SOAP Type Library 3.0を参照する
*PocketSoap [#w81a7f05]
-[[PocketSoap>http://www.pocketsoap.com/pocketsoap/]]
-[[PocketSoap用Proxyジェネレータ>http://www.pocketsoap.co...
-ASP.NETのWebサービスに引数を送っても無視される問題
--[[FAQの"Why does my .NET webservice ignore the data I s...
Set the EncodingStyle to ""
Specify the namespace URI for all the parameters.
--要するに、ネームスペースをちゃんと指定しないと引数を無...
*MS SOAP Toolkitについて [#p946a02f]
-[[Downloadページ>http://msdn.microsoft.com/webservices/w...
**SoapClient30オブジェクト [#n1fd0dae]
-以下のオブジェクトに依存する
--SoapSerializer30
--SoapReader30
--WSDLReader30
--WSDLOperation30
**WSDL Generator [#ze50a13a]
-プロキシコードのジェネレータではなく、WSDLそのもののジェ...
**Trace ユーティリティ [#qc22cf5a]
-IISサーバの待ちうけポートをIISマネージャから8080などに変...
--※POPFileなどを使っていると既にポート8080が使われている...
-File -> New -> Formated Traceなどでユーティリティのデス...
-Formatedというのは、HTTPヘッダを切り離して表示するかどう...
-最低限の機能という感じで、あまり使いやすいものではない
**サンプル [#we1ff313]
'---------------------------------
' High Level APIで実際に動かしてみたサンプル
'---------------------------------
Private Sub cmdTest_Click()
Dim sc As SoapClient30
Set sc = New SoapClient30
Call sc.MSSoapInit("http://localhost/Test/SrvTst.asmx...
Dim s As String
Dim a As String
Dim b As String
a = tbA.Text
b = tbB.Text
s = sc.Test2(a, b)
MsgBox (s)
lblC.Caption = sc.GetVal()
End Sub
**タイムアウトの設定 [#p1c884b4]
-Timeout値(処理終了の待ち時間)の変更は以下のようにやる
Dim sc As SoapClient30
Set sc = New SoapClient30
'サーバのURLにあわせる
Call sc.MSSoapInit(wsdlURL)
sc.ConnectorProperty("Timeout") = 90000 'ms単位。デフォ...
-MSSoapInit()を処理した後にやること。
-Webサーバ側のタイムアウト設定も合わせてやっておくこと(II...
-ConnectTimeoutプロパティはサーバへの接続を待つ時間のタイ...
**ユーザ定義した型を引数や戻り値で扱うには? [#j89950b4]
-以下の方法がある
-Type Mapperなるものを使う
--COM オブジェクトとしてマップする
--Type Mapperにはさらに種類がある
---Generic Type Mapper
・UDT(User Designed Type) Mapper
・COMではなくUserDefined dataを使いたい場合
・Custom Type Mapper
・双方向リストやグラフを使う場合
・elementではなくattributeを読み書きしたい場合
・マッピングが1対1対応しない場合
-IXMLDOMNodeList parameterを使う(こっちの方が楽だと思う)
--DOMとしてマップする
---COMを使いたくない場合
--Microsoft XML, v4.0以上を参照設定する必要あり
**ユーザ定義型を引数として渡すとき [#o98f9b9d]
-このような型をパラメータとして渡したいとき
//注意:Webサービスの引数に使うクラスにはデフォルトコン...
public class PrmCircle
{
public double Lat;
public double Lon;
public double Rad;
public PrmSyokenCircle()
{
Lat = 0;
Lon = 0;
Rad = 0;
}
}
-VBでの渡し方
Dim sc As SoapClient30
Set sc = New SoapClient30
'SOAP Client初期化
Call sc.MSSoapInit(wsdlURL)
Dim dom As New DOMDocument30
Dim list As IXMLDOMNodeList
Dim elm As IXMLDOMElement
Set dom.documentElement = dom.createElement("PrmCircl...
Set elm = dom.createElement("Lat")
elm.Text = "0.1"
Call dom.documentElement.appendChild(elm)
Set elm = dom.createElement("Lon")
elm.Text = "0.2"
Call dom.documentElement.appendChild(elm)
Set elm = dom.createElement("Rad")
elm.Text = "1.0"
Call dom.documentElement.appendChild(elm)
Set list = dom.documentElement.childNodes
Dim lists(0) As IXMLDOMNodeList
Set lists(0) = list
Dim ret As IXMLDOMNodeList
Set ret = sc.HogeCall(lists)
**ユーザ定義型の中で配列を使うには [#ia1a9484]
-パラメータとなる型のメンバはなぜか1つだけでは実行時エラ...
-パラメータがこのような場合
public class PrmPoint
{
public double Lat;
public double Lon;
}
public class PrmPolygon
{
public int Cnt; <-- このような場合、メンバが2つ以上...
public PrmPoint[] Pnts;
public PrmPolygon()
{
Pnts = null;
}
}
-クライアント側の例
Dim sc As SoapClient30
Set sc = New SoapClient30
'SOAP Client初期化
Call sc.MSSoapInit(wsdlURL)
Dim dom As New DOMDocument26
Dim list As IXMLDOMNodeList
Dim elm As IXMLDOMElement
Dim Pnts As IXMLDOMElement
Dim pnt As IXMLDOMElement
Dim lists(1) As IXMLDOMNodeList
Set dom.documentElement = dom.createElement("PrmPolyg...
Set elm = dom.createElement("Cnt")
elm.Text = "0"
Call dom.documentElement.appendChild(elm)
Set Pnts = dom.createElement("Pnts")
Set pnt = dom.createElement("PrmPoint")
Set elm = dom.createElement("Lat")
elm.Text = "0.1"
Call pnt.appendChild(elm)
Set elm = dom.createElement("Lon")
elm.Text = "0.2"
Call pnt.appendChild(elm)
Call Pnts.appendChild(pnt)
Set pnt = dom.createElement("PrmPoint")
Set elm = dom.createElement("Lat")
elm.Text = "0.3"
Call pnt.appendChild(elm)
Set elm = dom.createElement("Lon")
elm.Text = "0.4"
Call pnt.appendChild(elm)
Call Pnts.appendChild(pnt)
Call dom.documentElement.appendChild(Pnts)
Set list = dom.documentElement.childNodes
Set lists(0) = list
Set dom.documentElement = dom.createElement("PrmPolyg...
Set elm = dom.createElement("Cnt")
elm.Text = "1"
Call dom.documentElement.appendChild(elm)
Set Pnts = dom.createElement("Pnts")
Set pnt = dom.createElement("PrmPoint")
Set elm = dom.createElement("Lat")
elm.Text = "0.5"
Call pnt.appendChild(elm)
Set elm = dom.createElement("Lon")
elm.Text = "0.6"
Call pnt.appendChild(elm)
Call Pnts.appendChild(pnt)
Set pnt = dom.createElement("PrmPoint")
Set elm = dom.createElement("Lat")
elm.Text = "0.7"
Call pnt.appendChild(elm)
Set elm = dom.createElement("Lon")
elm.Text = "0.8"
Call pnt.appendChild(elm)
Call Pnts.appendChild(pnt)
Call dom.documentElement.appendChild(Pnts)
Set list = dom.documentElement.childNodes
Set lists(1) = list
Dim ret As IXMLDOMNodeList
Set ret = sc.HogeCall(lists)
ページ名: