Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.1 » SQL Anywhere サーバー プログラミング » HTTP Web サービス » HTTP Web サービスの例 » チュートリアル:Visual C# を使用した SOAP/DISH Web サービスへのアクセス

 

レッスン 2:Web サーバーと通信するための Visual C# アプリケーションの作成

この例では、.NET Framework 2.0 の機能を使用しています。

 ♦ SOAP および DISH サービスの作成
  1. Visual Studio を起動します。

  2. 新しい Visual C# Windows フォームのアプリケーションプロジェクトを作成します。

    空のフォームが表示されます。

  3. オブジェクトに Web 参照を追加します。

    1. [プロジェクト] » [サービス参照の追加] をクリックします。

    2. [サービス参照の追加] ウィンドウで、[詳細] をクリックします。

    3. [サービス参照設定] ウィンドウで、[Web 参照の追加] をクリックします。

    4. [Web 参照の追加] ウィンドウで、[URL] フィールドに http://localhost:8082/demo/SASoapTest_DNET と入力します。

    5. [移動] をクリックします。

      Visual Studio に、SASoapTest_DNET サービスから使用できる EmployeeList メソッドが表示されます。

    6. [参照の追加] をクリックします。

      Visual Studio により、localhost Web 参照がプロジェクトに追加されます。これは、[ソリューション エクスプローラー] ウィンドウ枠から選択できます。

  4. Web クライアントアプリケーションに適したオブジェクトを空のフォームに移植します。

    フォームが次の図のようになるように、[ツールボックス] ウィンドウ枠から ListBox オブジェクトと Button オブジェクトをフォームにドラッグし、テキスト属性を更新します。

    デモ用の SOAP フォーム。
  5. 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();
    while (dr.Read())
    {
      for (int i = 0; i < dr.FieldCount; i++)
      {
        string columnName = "(" + dr.GetDataTypeName(i) 
                          + ")" 
                          + dr.GetName(i);
        if (dr.IsDBNull(i))
        {
          listBox1.Items.Add(columnName + "=(null)");
        }
        else {
          System.TypeCode typeCode = 
              System.Type.GetTypeCode(dr.GetFieldType(i));
          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;
            case System.TypeCode.DBNull:
              listBox1.Items.Add(columnName 
                  + "=(null)");
              break;
            default:
              listBox1.Items.Add(columnName 
                  + "=(unsupported)");
              break;
          }
        }
      }
      listBox1.Items.Add("");
    }
    dr.Close();
  6. アプリケーションを実行します。

    [デバッグ] » [デバッグの開始] をクリックします。

  7. 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=New York
    (String)Country=USA
    (String)PostalCode=02192
    (String)Phone=6175553985
    (String)Status=A
    (String)SocialSecurityNumber=017349033
    (String)Salary=$45,700.00
    (DateTime)StartDate=28/08/1984 0:00:00 AM
    (DateTime)TerminationDate=(null)
    (DateTime)BirthDate=05/06/1958 0:00:00 AM
    (Boolean)BenefitHealthInsurance=True
    (Boolean)BenefitLifeInsurance=True
    (Boolean)BenefitDayCare=False
    (String)Sex=F

    Salary の値は、クライアントの通貨フォーマットに変換されます。

    NULL が格納された値は、DBNull として返されます。日付が格納され時刻がない値には、時刻に 00:00:00 つまり午前 0 時が割り当てられます。

Web サーバーからの XML 応答には、フォーマットされた結果セットが含まれます。すべてのカラムデータは、データの文字列表現に変換されます。次の結果セットは、クライアントに送信されるときの結果セットのフォーマット方法を示します。



<row>
 <EmployeeID>102</EmployeeID>
 <ManagerID>501</ManagerID>
 <Surname>Whitney</Surname>
 <GivenName>Fran</GivenName>
 <DepartmentID>100</DepartmentID>
 <Street>9 East Washington Street</Street>
 <City>Cornwall</City>
 <State>NY</State>
 <Country>USA</Country>
 <PostalCode>02192</PostalCode>
 <Phone>6175553985</Phone>
 <Status>A</Status>
 <SocialSecurityNumber>017349033</SocialSecurityNumber>
 <Salary>45700.000</Salary>
 <StartDate>1984-08-28-05:00</StartDate>
 <TerminationDate xsi:nil="true" />
 <BirthDate>1958-06-05-05:00</BirthDate>
 <BenefitHealthInsurance>1</BenefitHealthInsurance>
 <BenefitLifeInsurance>1</BenefitLifeInsurance>
 <BenefitDayCare>0</BenefitDayCare>
 <Sex>F</Sex>
 </row>

日付または時刻の情報が格納されたカラムには、Web サーバーの UTC からのオフセットが含まれます。上記の結果セットでは、オフセットは -05:00 であり、これは UTC (アメリカ東部標準時) から西に 5 時間であることを意味します。

日付だけが格納されたカラムは、yyyy-mm-dd-HH:MM または yyyy-mm-dd+HH:MM のようにフォーマットされます。ゾーンオフセット (-HH:MM または +HH:MM) は文字列のサフィックスとして付きます。

時刻だけが格納されたカラムは、hh:mm:ss.nnn-HH:MM または hh:mm:ss.nnn+HH:MM のようにフォーマットされます。ゾーンオフセット (-HH:MM または +HH:MM) は文字列のサフィックスとして付きます。

日付と時刻の両方が格納されたカラムは、yyyy-mm-ddThh:mm:ss.nnn-HH:MM または yyyy-mm-ddThh:mm:ss.nnn+HH:MM のようにフォーマットされます。日付と時刻は、文字 T で区切られます。ゾーンオフセット (-HH:MM または +HH:MM) は文字列のサフィックスとして付きます。

DATATYPE ON 句が指定されているため、XML 結果セット応答にデータ型情報が生成されます。Web サーバーからの応答の一部を次に示します。型情報はデータベースカラムのデータ型に一致します。



<xsd:element name='EmployeeID' minOccurs='0' type='xsd:int' />
<xsd:element name='ManagerID' minOccurs='0' type='xsd:int' />
<xsd:element name='Surname' minOccurs='0' type='xsd:string' />
<xsd:element name='GivenName' minOccurs='0' type='xsd:string' />
<xsd:element name='DepartmentID' minOccurs='0' type='xsd:int' />
<xsd:element name='Street' minOccurs='0' type='xsd:string' />
<xsd:element name='City' minOccurs='0' type='xsd:string' />
<xsd:element name='State' minOccurs='0' type='xsd:string' />
<xsd:element name='Country' minOccurs='0' type='xsd:string' />
<xsd:element name='PostalCode' minOccurs='0' type='xsd:string' />
<xsd:element name='Phone' minOccurs='0' type='xsd:string' />
<xsd:element name='Status' minOccurs='0' type='xsd:string' />
<xsd:element name='SocialSecurityNumber' minOccurs='0' type='xsd:string' />
<xsd:element name='Salary' minOccurs='0' type='xsd:decimal' />
<xsd:element name='StartDate' minOccurs='0' type='xsd:date' />
<xsd:element name='TerminationDate' minOccurs='0' type='xsd:date' />
<xsd:element name='BirthDate' minOccurs='0' type='xsd:date' />
<xsd:element name='BenefitHealthInsurance' minOccurs='0' type='xsd:boolean' />
<xsd:element name='BenefitLifeInsurance' minOccurs='0' type='xsd:boolean' />
<xsd:element name='BenefitDayCare' minOccurs='0' type='xsd:boolean' />
<xsd:element name='Sex' minOccurs='0' type='xsd:string' />