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

SQL Anywhere 12.0.1 (Deutsch) » SQL Anywhere Server - Programmierung » HTTP-Webdienste » Beispiele für HTTP-Webdienste » Praktische Einführung: Verwenden von Visual C# für den Zugriff auf einen SOAP/DISH-Webdienst

 

Lektion 2: Erstellen einer Visual C#-Anwendung für die Kommunikation mit dem Webserver

Beachten Sie, dass dieses Beispiel Funktionen aus .NET Framework 2.0 verwendet.

 Erstellen der SOAP- und DISH-Dienste
  1. Starten Sie Visual Studio.

  2. Erstellen Sie ein neues Windows Form-Anwendungsprojekt in Visual C#.

    Ein leeres Formular wird angezeigt.

  3. Fügen Sie dem Projekt einen Webverweis hinzu.

    1. Klicken Sie auf Projekt » Dienstverweis hinzufügen.

    2. Klicken Sie im Fenster "Dienstverweis hinzufügen" auf die Option Erweitert.

    3. Klicken Sie im Fenster "Einstellungen für Dienstverweise" auf die Option Webverweis hinzufügen.

    4. Geben Sie im Fenster "Webverweis hinzufügen" die Zeichenfolge http://localhost:8082/demo/SASoapTest_DNET in das Feld URL ein.

    5. Klicken Sie auf Gehe zu.

      Visual Studio listet die im SASoapTest_DNET-Dienst verfügbare EmployeeList-Methode auf.

    6. Klicken Sie auf Verweis hinzufügen.

      Visual Studio fügt dem Projekt den Webverweis localhost hinzu. Sie können ihn im Fenster Projektmappen-Explorer auswählen.

  4. Füllen Sie das leere Formular mit den gewünschten Objekte für die Webclient-Anwendung mit Daten.

    Ziehen Sie im Fenster Toolbox die ListBox- und Button-Objekte in das Formular und aktualisieren Sie die Textattribute so, dass das Formular dem in der folgenden Darstellung ähnelt:

    SOAP-Demonstrationsformular.
  5. Schreiben Sie eine Prozedur, die auf den Webverweis zugreift und die verfügbaren Methoden verwendet.

    Doppelklicken Sie auf Employee List und fügen Sie den folgenden Code für das Schaltflächenereignis "Click" hinzu:



    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. Führen Sie die Anwendung aus.

    Klicken Sie auf Debuggen » Debuggen starten.

  7. Kommunizieren Sie mit dem Web-Datenbankserver.

    Klicken Sie auf Employee List.

    Das ListBox-Objekt zeigt die Ergebnismenge EmployeeList als (Typ)Name=Wert-Paare an. Die folgende Ausgabe zeigt wie ein Eintrag im ListBox-Objekt angezeigt wird:



    (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

    Der Salary-Betrag wird in das Währungsformat des Clients konvertiert.

    Werte, die NULL enthalten, werden als DBNull zurückgegeben. Werte, die ein Datum ohne Uhrzeit enthalten, wird die Uhrzeit 00:00:00 (Mitternacht) zugewiesen.

Die XML-Antwort vom Webserver enthält eine formatierte Ergebnismenge. Alle Spaltendaten werden in eine Zeichenfolgendarstellung der Daten konvertiert. Die folgende Ergebnismenge veranschaulicht wie Ergebnismengen formatiert werden, wenn sie an den Client gesendet werden:



<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>

Spalten, die Datums- und/oder Zeitangaben enthalten, berücksichtigen den UTC-Offset des Webservers. In diesem Beispiel beträgt der Offset -05:00. Dies entspricht 5 Stunden westlich der UTC-Zeitzone (in diesem Fall ist das die North American Eastern Standard Time).

Spalten, die lediglich das Datum enthalten, werden folgendermaßen formatiert: yyyy-mm-dd-HH:MM oder yyyy-mm-dd+HH:MM. An die Zeichenfolge wird ein Zeitzonen-Offset angehängt (-HH:MM oder +HH:MM).

Spalten, die lediglich die Uhrzeit enthalten, werden folgendermaßen formatiert: hh:mm:ss.nnn-HH:MM oder hh:mm:ss.nnn+HH:MM. An die Zeichenfolge wird ein Zeitzonen-Offset angehängt (-HH:MM oder +HH:MM).

Spalten, die sowohl Datums- als auch Zeitangaben enthalten, werden folgendermaßen formatiert: yyyy-mm-ddThh:mm:ss.nnn-HH:MM oder yyyy-mm-ddThh:mm:ss.nnn+HH:MM. Beachten Sie, dass das Datum durch den Buchstaben 'T' von der Zeit getrennt wird. An die Zeichenfolge wird ein Zeitzonen-Offset angehängt (-HH:MM oder +HH:MM).

Die DATATYPE ON-Klausel wird zur Generierung von Datentypinformationen in der zurückgegebenen XML-Ergebnismenge angegeben. Im Folgenden wird ein Fragment der Antwort des Webservers gezeigt. Beachten Sie, dass die Datentypinformationen mit dem Datentyp der Datenbankspalten übereinstimmen.



<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' />