主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

针对 MATLAB 测试客户端数据集成

此示例说明如何使用 MATLAB® Production Server™ 的开发版本测试 RESTful API 或 Java® 客户端以将其部署到 MATLAB Production Server MATLABCompiler SDK™ 包含 MATLAB Production Server 的开发版本,用于在将应用程序代码和 Excel® 加载项部署到 Web 应用程序和企业系统之前对其进行测试和调试。

为了测试目的,您将创建并使用一个名为 addmatrix 的 MATLAB 函数,该函数接受两个数字矩阵作为输入并返回它们的总和作为输出。您可以通过点击 Production Server 编译器中的测试客户端按钮来访问本地测试服务器。

创建 MATLAB 函数

  1. 编写一个名为 addmatrixMATLAB 函数,该函数接受两个数字矩阵作为输入并返回它们的和作为输出。将此文件保存为 addmatrix.m

    function a = addmatrix(a1, a2)
    a = a1 + a2;
  2. 在 MATLAB 命令提示符下测试该函数。

    a = [10 20 30; 40 50 60];
    b = [100 200 300; 400 500 600];
    c = addmatrix(a,b)
    c =
    
       110   220   330
       440   550   660

准备测试

  1. 在 MATLAB 命令提示符下输入以下内容打开 Production Server 编译器

    productionServerCompiler

    Production Server Compiler with Deployable Archive (.ctf) type selected and addmatrix.m in the exported functions section

  2. 在工具条的 Type 部分中,从列表中选择 Deployable Archive (.ctf)

  3. 指定要部署的 MATLAB 函数。

    1. 在工具条的 Exported Functions 部分,点击加号按钮。

    2. 使用文件资源管理器,定位并选择 addmatrix.m 文件。

  4. 在标题为 Include MATLAB function signature file 的部分中,点击 Create File 按钮。这将创建一个可编辑的 JSON 文件,其中包含存档中包含的函数的函数签名。通过编辑此文件,您可以指定参量类型和/或输入和输出的大小,还可以为每个输入提供帮助信息。有关详细信息,请参阅JSON 中的 MATLAB 函数签名 (MATLAB Production Server)

    如果您有一个带有函数签名的现有 JSON 文件,点击 Add Existing File 按钮来添加该文件,而不是点击 Create File 按钮。

    通过将此信息包含在您的存档中,您可以使用服务器上的发现服务功能。

    注意

    MATLAB Production Server RESTful API 支持发现服务。有关详细信息,请参阅用于 MATLAB 函数执行的 RESTful API (MATLAB Production Server)

  5. 点击 Test Client 按钮。App 将切换到 TEST 选项卡。

    Production Server Compiler with port set to 9910. The server address is http://localhost:9910/matfun.

    1. 检查 Port 字段的值。

      它必须是:

      • 可用端口

      • 客户端正在使用的相同端口号

      对于此示例,客户端将使用端口 9910。

    2. 选中复选框以 Enable CORS。如果您使用的客户端使用了 JavaScript® 则需要启用此选项。通过启用 CORS,服务器将接受来自不同域的请求。

    3. 选中复选框以 Enable Discovery。需要启用此选项才能使用发现服务。发现服务以 JSON 对象的形式返回有关已部署 MATLAB 函数的信息。

  6. 点击 Start

使用 RESTful API 测试

本示例使用 MATLAB使用 HTTP 从 MATLAB 调用 Web 服务 调用 RESTful API 并向测试接口发出请求。您可以使用其他工具,例如 cURL 或 JavaScript XHR。

测试接口不支持异步客户端请求。该接口处理POST Asynchronous Request (MATLAB Production Server)就像POST Synchronous Request (MATLAB Production Server)。不支持来自 RESTful API 的其他异步请求。

测试发现服务

  1. 导入 MATLAB HTTP 接口包,设置请求,并将请求发送到测试接口。

    % Import MATLAB HTTP Interface packages
    import matlab.net.*
    import matlab.net.http.*
    import matlab.net.http.fields.*
    
    % Setup request
    requestUri = URI('http://localhost:9910/api/discovery');
    options = matlab.net.http.HTTPOptions('ConnectTimeout',20,...
        'ConvertResponse',false);
    request = RequestMessage;
    request.Header = HeaderField('Content-Type','application/json');
    request.Method = 'GET';
    
    % Send request
    response = request.send(requestUri, options);
    

  2. 查看响应主体。

    response.Body.Data
    ans = 
    
        "{"discoverySchemaVersion":"1.0.0","archives":{"matfun":{"archiveSchemaVersion":"1.1.0",...
    响应主体已被剪辑以适合页面大小。通过展开 ans 可以找到响应主体的格式化版本。

     ans

    要使用 JavaScript XHR 进行测试,您可以使用以下代码:

     用于测试发现服务的 JavaScript XHR 代码

测试数据交换

  1. 启动 MATLAB 桌面的单独会话。

    注意

    您必须使用单独的 MATLAB 会话来发出 POST 请求。如果您从运行测试接口的同一 MATLAB 会话发出 POST 请求,MATLAB 不会响应。

  2. 导入 MATLAB HTTP 接口包,设置请求,并将请求发送到测试接口。

    % Import HTTP interface packages
    import matlab.net.*
    import matlab.net.http.*
    import matlab.net.http.fields.*
    
    % Setup message body
    body = MessageBody;
    a = [10 20 30; 40 50 60];
    b = [100 200 300;400 500 600];
    payload = mps.json.encoderequest({a,b});
    body.Payload = payload;
    
    % Setup request
    requestUri = URI('http://localhost:9910/matfun/addmatrix');
    options = matlab.net.http.HTTPOptions('ConnectTimeout',20,...
        'ConvertResponse',false);
    request = RequestMessage;
    request.Header = HeaderField('Content-Type','application/json');
    request.Method = 'POST';
    request.Body = body;
    
    % Send request
    response = request.send(requestUri, options)
  3. 查看响应主体。

    response.Body.Data
    ans = 
    
        "{"lhs":[[[110,220,330],[440,550,660]]]}"

    要使用 JavaScript XHR 进行测试,您可以使用以下代码:

     用于测试数据交换的 JavaScript XHR 代码

检查数据

  1. 切换到 Production Server 编译器

    MATLAB Execution Requests section where the status of function a=addmatrix(a1,a2) is marked as complete. The inputs a1 and a2 are both 2-by-3 double arrays and the output a is a 2-by-3 double array.

  2. 在测试界面的 MATLAB 执行请求下,点击 App 中的已完成消息即可查看客户端与 MATLAB 之间交换的值。

  3. 点击输入可查看传递到 MATLAB 数组。

  4. 点击输出可查看返回到客户端的数组。

设置断点

  1. Production Server 编译器的测试界面中,点击 Breakpoints > Break on MATLAB function entry

  2. 在单独的 MATLAB 会话中,向本地测试服务器重新发送 POST 请求。

  3. 当 MATLAB 编辑器打开时,请注意在函数的第一行设置了一个断点,并且处理已在断点处暂停。

    Function addmatrix.m with a breakpoint on the line a = a1 + a2. The value of a1 is [10 20 30; 40 50 60], and the value of a2 is [100 200 300;400 500 600].

    您现在可以使用所有 MATLAB 调试工具来逐步执行您的函数。

    注意

    如果您花费很长时间逐步执行 MATLAB 函数,则可能会在客户端中产生超时错误。

  4. 请注意,变量 a1a2 显示在 MATLAB 工作区中。

  5. 在 MATLAB 编辑器中,点击继续以完成调试过程。

    App 的服务器请求部分显示请求已成功完成。

  6. 点击停止以关闭本地测试服务器。

  7. 点击关闭测试

使用 Java 客户端应用程序进行测试

  1. 创建一个 Java 文件 MPSClientExample.java 其中包含以下客户端代码:

     MPSClientExample.java

  2. 在系统命令提示符下,使用 javac 命令编译 Java 客户端代码。

    javac -classpath "matlabroot\toolbox\compiler_sdk\mps_clients\java\mps_client.jar" MPSClientExample.java
    
  3. 在系统命令提示符下,运行 Java 客户端。

    java -classpath .;"matlabroot\toolbox\compiler_sdk\mps_clients\java\mps_client.jar" MPSClientExample
    

    注意

    您无法从 Java 命令提示符运行 MATLAB 客户端。

    应用程序在控制台返回以下内容:

       110.0   220.0   330.0
       440.0   550.0   660.0

    您可以使用下面列出的相同步骤调试客户端和 MATLAB 之间交换的数据使用 RESTful API 测试

另请参阅

主题