このレッスンでは、Web サーバと通信するための Visual C# アプリケーションを作成します。
前提条件
このレッスンは、レッスン 1 で説明したように Web サーバが設定されていることを前提としています。レッスン 1:SOAP 要求を受信し SOAP 応答を送信する Web サーバの設定を参照してください。
このレッスンを終了するには、最新バージョンの Visual Studio が必要です。
このレッスンでは、このチュートリアルの開始時に、権限のセクションで一覧されているロールと権限を持っていることを前提としています。 チュートリアル:Visual C# を使用した SOAP/DISH Web サービスへのアクセス
内容と備考
このレッスンには、localhost への複数の参照が含まれています。Web クライアントを Web サーバと同じコンピュータで実行していない場合は、localhost の代わりにレッスン 1 の Web サーバのホスト名または IP アドレスを使用します。
この例では、.NET Framework 2.0 の機能を使用しています。
Visual Studio を起動します。
新しい Visual C# Windows フォームのアプリケーションプロジェクトを作成します。
空のフォームが表示されます。
オブジェクトに Web 参照を追加します。
[プロジェクト] » [サービス参照の追加] をクリックします。
[サービス参照の追加] ウィンドウで、[詳細] をクリックします。
[サービス参照設定] ウィンドウで、[Web 参照の追加] をクリックします。
[Web 参照の追加] ウィンドウで、[URL] フィールドに http://localhost:8082/demo/SASoapTest_DNET と入力します。
[移動] (または緑の矢印) をクリックします。
Visual Studio に、SASoapTest_DNET サービスから使用できる EmployeeList メソッドが表示されます。
[参照の追加] をクリックします。
Visual Studio は、localhost を [ソリューション エクスプローラー] ウィンドウ枠のプロジェクト Web リファレンスに追加します。
Web クライアントアプリケーションに適したオブジェクトを空のフォームに移植します。
フォームが次の図のようになるように、[ツールボックス] ウィンドウ枠から ListBox オブジェクトと Button オブジェクトをフォームにドラッグし、テキスト属性を更新します。
Web 参照にアクセスするプロシージャを作成し、使用可能なメソッドを使用します。
Employee List ボタンをダブルクリックし、ボタンクリックイベントに次のコードを追加します。
int sqlCode; listBox1.Items.Clear(); localhost.SASoapTest_DNET proxy = new localhost.SASoapTest_DNET(); DataSet results = proxy.EmployeeList(out sqlCode); DataTableReader dr = results.CreateDataReader(); listBox1.BeginUpdate(); while (dr.Read()) { for (int i = 0; i < dr.FieldCount; i++) { string dataTypeName = dr.GetDataTypeName(i); string dataName = dr.GetName(i); System.Type ftype = dr.GetFieldType(i); System.TypeCode typeCode = System.Type.GetTypeCode(ftype); string columnName = "(" + dataTypeName + ")" + dataName + "="; if (dr.IsDBNull(i)) { listBox1.Items.Add(columnName + "(null)"); } else { switch (typeCode) { case System.TypeCode.Int32: Int32 intValue = dr.GetInt32(i); listBox1.Items.Add(columnName + intValue); break; case System.TypeCode.Decimal: Decimal decValue = dr.GetDecimal(i); listBox1.Items.Add(columnName + decValue.ToString("c")); break; case System.TypeCode.String: string stringValue = dr.GetString(i); listBox1.Items.Add(columnName + stringValue); break; case System.TypeCode.DateTime: DateTime dateValue = dr.GetDateTime(i); listBox1.Items.Add(columnName + dateValue); break; case System.TypeCode.Boolean: Boolean boolValue = dr.GetBoolean(i); listBox1.Items.Add(columnName + boolValue); break; default: listBox1.Items.Add(columnName + "(unsupported)"); break; } } } listBox1.Items.Add(""); } listBox1.EndUpdate(); dr.Close(); |
アプリケーションを実行します。
[デバッグ] » [デバッグの開始] をクリックします。
Web データベースサーバと通信します。
Employee List をクリックします。
ListBox オブジェクトに、EmployeeList 結果セットが「(型)名=値」のペアで表示されます。次の出力は、ListBox オブジェクトでのエントリの表示方法を示します。
(Int32)EmployeeID=102 (Int32)ManagerID=501 (String)Surname=Whitney (String)GivenName=Fran (Int32)DepartmentID=100 (String)Street=9 East Washington Street (String)City=Cornwall (String)State=NY (String)Country=USA (String)PostalCode=02192 (String)Phone=6175553985 (String)Status=A (String)SocialSecurityNumber=017349033 (Decimal)Salary=$45,700.00 (DateTime)StartDate=8/28/1984 12:00:00 AM (DateTime)TerminationDate=(null) (DateTime)BirthDate=6/5/1958 12:00:00 AM (Boolean)BenefitHealthInsurance=True (Boolean)BenefitLifeInsurance=True (Boolean)BenefitDayCare=False (String)Sex=F |
Salary の値は、クライアントの通貨フォーマットに変換されます。
日付が格納され時刻がない値には、時刻に 00:00:00 つまり午前 0 時が割り当てられます (クライアントのロケール設定によって異なる形式で表示される)。
NULL が格納された値は、DataTableReader.IsDBNull メソッドを使用してテストされます。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |