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

SQL Anywhere 11.0.1 (中文) » QAnywhere » 移动 Web 服务 » 编写移动 Web 服务应用程序

 

设置 .NET 移动 Web 服务应用程序

在将 .NET 同 QAnywhere 一起使用前,必须对 Visual Studio 项目作如下更改:

  • 添加对 QAnywhere .NET DLL 和移动 Web 服务 .NET DLL 的引用。这可通知 Visual Studio 包含哪个 DLL 以找到 QAnywhere .NET API 的代码和移动 Web 服务 .NET API 的代码。

  • 向您的源代码中添加一些行以引用 QAnywhere .NET API 类和移动 Web 服务 .NET API 类。要使用 QAnywhere .NET API,您必须在源代码中添加一行以引用数据提供程序。必须为 C# 添加与 Visual Basic 不同的语句行。

完整的说明如下。

♦  在 Visual Studio 项目中添加对 QAnywhere .NET API 和对移动 Web 服务 API 的引用
  1. 启动 Visual Studio 并打开项目。

  2. 在 [Solution Explorer] 窗口中,右击 [References] 文件夹,然后从弹出式菜单中选择 [Add Reference]。

  3. 在 [浏览] 选项卡上,在以下目录中定位 iAnywhere.QAnywhere.Client.dlliAnywhere.QAnywhere.WS.dll

    • .NET Framework 2.0:install-dir\Assembly\v2
    • .NET Compact Framework 2.0:install-dir\ce\Assembly\v2

    在您的环境的适当目录中,选择每个 DLL 并单击 [Open]。

  4. 要验证 DLL 是否已添加到项目,请展开 Solution Explorer 中的 [References] 树。iAnywhere.QAnywhere.Client.dlliAnywhere.QAnywhere.WS.dll 应出现在列表中。

在源代码中引用数据提供程序类
♦  在代码中引用 QAnywhere .NET API 类和移动 Web 服务 API 类
  1. 启动 Visual Studio 并打开项目。

  2. 如果使用 C#,请将以下语句行添加到文件开始处的 using 指令列表中:

    using iAnywhere.QAnywhere.Client;
    using iAnywhere.QAnywhere.WS;
  3. 如果使用 Visual Basic,请将以下语句行添加到文件开始处的导入列表中:

    Imports iAnywhere.QAnywhere.Client
    Imports iAnywhere.QAnywhere.WS

    并不严格要求使用导入语句行。但是,它使您可以使用 QAnywhere 和移动 Web 服务类的简写形式。如果没有它们,您仍然可以在代码中使用完全限定类名。例如,以下代码使用长格式:

    iAnywhere.QAnywhere.Client.QAManager 
    mgr = 
     new iAnywhere.QAnywhere.Client.QAManagerFactory.Instance.CreateQAManager(
    "qa_manager.props" );

    以下代码使用简写形式:

    QAManager mgr = QAManagerFactory.Instance.CreateQAManager(
     "qa_manager.props" );
♦  对 .NET 初始化 QAnywhere 和移动 Web 服务
  1. 包括 iAnywhere.QAnywhere.ClientiAnywhere.QAnywhere.WS 命名空间,如上面的过程中所述。

    using iAnywhere.QAnywhere.Client;
    using iAnywhere.QAnywhere.WS;
  2. 创建 QAManager 对象。

    例如,要创建缺省的 QAManager 对象,可调用 CreateQAManager(以 null 作为其参数):

    QAManager mgr;
    mgr = QAManagerFactory.Instance.CreateQAManager( null );
    提示

    为了提供最大并发数,多线程应用程序应为每个线程创建一个 QAManager。请参见多线程注意事项

    有关 QAManagerFactory 的详细信息,请参见QAManagerFactory 类

    您也可以创建使用属性文件自定义的 QAManager 对象。属性文件在 CreateQAManager 方法中指定:

    mgr = QAManagerFactory.Instance.CreateQAManager( 
      "qa_mgr.props" );

    其中,qa_mgr.props 是远程设备上属性文件的名称。

  3. 初始化 QAManager 对象。例如:

    mgr.Open(
       AcknowledgementMode.EXPLICIT_ACKNOWLEDGEMENT);

    open 方法的参数是确认模式,它指示确认消息的方式。它必须为 IMPLICIT_ACKNOWLEDGEMENT 或 EXPLICIT_ACKNOWLEDGEMENT。

    移动 Web 服务所使用的 QAnywhere 消息无法访问移动 Web 服务应用程序。当在 EXPLICIT_ACKNOWLEDGEMENT 模式下使用 QAManager 时,可使用 WSResult 的 Acknowledge 方法来确认包含 Web 服务请求结果的 QAnywhere 消息。此方法指示应用程序是否已经成功地处理了该响应。

    有关确认模式的详细信息,请参见:

    注意

    您可以创建 QATransactionalManager 而非 QAManager。请参见为 .NET 客户端实现事务性消息传递

  4. 创建一个服务绑定类的实例。

    移动 Web 服务 WSDL 编译器可从定义 Web 服务的 WSDL 文档生成服务绑定类。

    QAManager 由 Web 服务绑定类的实例使用,以在发出 Web 服务请求的过程中执行消息传送操作。通过设置服务绑定类的属性 WS_CONNECTOR_ADDRESS,您可指定要用来发送 Web 服务请求(通过 QAnywhere)的连接器地址。您可使用要连接的 Web 服务 URL 来配置每个 QAnywhere Web 服务连接器,并且如果某个应用程序需要位于多个 URL 的 Web 服务,则对每个 URL 配置该连接器。

    例如:

    CurrencyConverterSoap service = new CurrencyConverterSoap( )
    service.SetQAManager(mgr);
    service.setProperty(
       "WS_CONNECTOR_ADDRESS",
       "ianywhere.connector.currencyconvertor\\");

    注意地址的结尾必须包含 \\。

另请参见
示例

要初始化移动 Web 服务,就必须创建一个 QAManager 和一个服务绑定类的实例。例如:

// QAnywhere initialization
  QAManager mgr = QAManagerFactory.Instance.CreateQAManager( null );
  mgr.SetProperty( "CONNECT_PARAMS", "eng=qanywhere;dbf=qanywhere.db;uid=ml_qa_user;pwd=qanywhere" );
  mgr.Open( AcknowledgementMode.IMPLICIT_ACKNOWLEDGEMENT );
  mgr.Start();
  
  // Instantiate the web service proxy
  CurrencyConvertorSoap service = new CurrencyConvertorSoap();
  service.SetQAManager( mgr );
  service.SetProperty( "WS_CONNECTOR_ADDRESS", "ianywhere.connector.currencyconvertor\\" );

CurrencyConvertor 示例的响应时间取决于 Web 服务的可用性。当移动 Web 服务应用程序并不总是可用时,异步 Web 服务请求会很有用。使用此方法,通过调用服务绑定类中的方法来发出 Web 服务请求,以将请求放置在外发队列中。该方法返回 WSResult,该结果可在以后(甚至是应用程序被重新启动之后)用来查询响应的状态。请参见异步 Web 服务请求