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

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - 编程 » SQL Anywhere 数据访问 API » SQL Anywhere Web 服务

 

教程:从 Microsoft .NET 访问 Web 服务

以下教程演示了如何使用 Visual C# 从 Microsoft .NET 访问 Web 服务。

♦  创建 SOAP 和 DISH 服务
  1. 在命令提示符处,运行以下命令以启动个人 Web 服务器。将 samples-dir 替换为示例数据库的实际位置。-xs http(port=80) 选项会告知数据库服务器接受来自端口 80 的 HTTP 请求。如果在端口 80 上已有 Web 服务器在运行,则将另一个端口号(如 8080)用于本教程,并在所有端口引用中使用 8080 来代替 80。

    dbeng11 -xs http(port=80) samples-dir\demo.db
  2. 启动 Interactive SQL。以 DBA 身份连接到 SQL Anywhere 示例数据库。执行以下语句:

    1. 定义一个列出 Employees 表的 SOAP 服务。

      CREATE SERVICE "SASoapTest/EmployeeList"
      TYPE 'SOAP'
      AUTHORIZATION OFF
      SECURE OFF
      USER DBA
      AS SELECT * FROM Employees;

      由于授权已关闭,因此任何人都可使用此服务而无需提供用户名和口令。命令在用户 DBA 下运行。这种安排方式虽然简单,但不安全。

    2. 创建一个 DISH 服务以充当 SOAP 服务的代理并生成 WSDL 文档。

      CREATE SERVICE "SASoapTest_DNET"
      TYPE 'DISH'
      GROUP "SASoapTest"
      FORMAT 'DNET'
      AUTHORIZATION OFF
      SECURE OFF
      USER DBA;

      SOAP 和 DISH 服务必须为 DNET 格式。在本示例中,创建 SOAP 服务时省略了 FORMAT 子句。这样,SOAP 服务将从 DISH 服务继承 DNET 格式。

  3. 启动 Microsoft Visual Studio。请注意,本示例使用 .NET Framework 2.0 中的函数。

    1. 使用 Visual C# 新建一个 [Windows Application] 项目。

      将出现一个空的窗体。

    2. 从 [Project] 菜单中,选择 [Add Web Reference]。

    3. 在 [Add Web Reference] 页面的 [URL] 字段中,输入以下 URL: http://localhost:80/demo/SASoapTest_DNET.

    4. 单击 [Go]。

      此时显示可供用于 SASoapTest_DNET 的方法的列表。您将看到 EmployeeList 方法。

    5. 单击 [Add Reference] 完成操作。

      [Solution Explorer] 窗口即会显示新的 Web 引用。

    6. 在 Visual Studio [Toolbox] 中,向窗体添加一个列表框和一个按钮,如下图所示。

      SOAP 演示窗体。
    7. 将按钮文本重命名为 Employee List

    8. 双击 [Employee List],然后为按钮的 click 事件添加以下代码。

      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.GetName(i);
          try
          {
            string value = dr.GetString(i);
            listBox1.Items.Add(columnName + "=" + value);
          }
          catch ( InvalidCastException )
          {
            listBox1.Items.Add(columnName + "=(null)");
          }
        }
        listBox1.Items.Add("");
      }
      dr.Close();
    9. 构建并运行程序。

      列表框将以 column name=value 对的形式显示 EmployeeList 结果集。

      会包括一个 try/catch 块来处理 NULL 列值(例如可以在 Employees 表的 TerminationDate 列中找到的列值)。