主要内容

.NET客户端中使用协议缓冲区的同步RESTful请求

这个例子展示了如何使用.NET客户端API进行同步RESTful请求,MATLAB®生产服务器™MATLAB函数执行的RESTful API和协议缓冲区(protobuf)。该示例提供并解释了一个示例c#客户端,MagicSync.cs,用于计算部署在服务器上的MATLAB函数。

若要在向服务器发出请求时使用protobuf,请设置HTTP内容类型请求报头到应用程序/ x-google-protobuf在客户机代码中。的MathWorks.MATLAB.ProductionServer.Client.REST. net客户端库中的命名空间提供了帮助类,在内部创建基于proto格式的protobuf消息,并返回相应的字节数组。在HTTP请求体中使用此字节数组。. net客户端库提供了反序列化protobuf响应的方法和类。

在同步请求执行中,客户端发出请求后,服务器将阻塞所有进一步的请求,直到它完成对原始请求的处理。处理完成后,服务器自动向客户机返回响应。有关更多信息,请参见同步执行

要使用.NET客户端API,必须向MathWorks.MATLAB.ProductionServer.Client.dll文件在你的c#项目。更多关于准备你的微软®Visual Studio®项目的环境,请参见准备Microsoft Visual Studio环境

在办公场所MATLAB制作服务器安装时,客户端api位于MPS_INSTALL美元/客户端,在那里MPS_INSTALL美元MATLAB制作服务器安装位置。客户端api也可在以下网站下载MATLAB生产服务器客户端库.Java®客户端API也托管在Maven™存储库中https://mvnrepository.com/artifact/com.mathworks.prodserver/mps_java_client

部署MATLAB对服务器的功能

编写MATLAB函数mymagic它使用魔法(MATLAB)函数创建一个魔方,然后将其部署到服务器上。这个函数mymagic只需要一个int32输入并返回一个二维的魔方数组中。该示例假设服务器实例运行在http://localhost:9910

有关如何部署的信息,请参见为MATLAB生产服务器创建可部署存档

函数M = mymagic(in);结束

向服务器发出同步请求

在c#客户端代码中,使用POST同步请求向服务器发出初始请求。有关同步请求执行的详细信息,请参见MATLAB制作服务器,请参阅同步执行

  1. 创建请求。

    使用.NET创建POST同步请求RESTful API的请求WebRequest。创建方法。

    请求URL由服务器实例的地址(http://localhost:9910),已部署存档的名称(mymagic),以及要求值的MATLAB函数名称(mymagic).设置HTTP请求方法为帖子.设置HTTP内容类型请求报头到应用程序/ x-google-protobuf,因为API返回协议缓冲区消息的字节数组。

    字符串mpsBaseUrl = "http://localhost:9910";var firstRequest = (HttpWebRequest)创建(mpsBaseUrl + "/mymagic/mymagic");firstRequest。方法= "POST";firstRequest。ContentType = "application/x-google-protobuf";

  2. 将请求发送到服务器。

    使用.NET将请求发送到服务器WebRequest.getResponse方法。

    使用创建(arg1, arg2, arg3)方法中定义的MATLABParams班级出现在MathWorks.MATLAB.ProductionServer.Client.REST的命名空间。MATLAB制作服务器. net客户端API来构建协议缓冲消息。的创建方法将部署函数的预期输出参数数量、预期输出类型和表示部署函数输入的对象数组作为输入。自部署以来mymagicfunction返回一个二维数组set__arg11而且最长new List {typeof(double[,])}.为指定整数值长度的输入mymagic函数。

    MATLABParams mlParams = MATLABParams。创建(1, new List { typeof(double[,]) }, 2); mlParams.WriteTo(firstRequest.GetRequestStream()); var response = (HttpWebResponse)firstRequest.GetResponse();

有关的更多信息WebRequest类,看到微软文档

接收和解释服务器响应

在成功执行POST同步请求时,服务器用一个协议缓冲区消息进行响应。方法中的方法解析协议缓冲区消息MATLABResult类来获取请求的结果。要创建MATLABResult对象时,使用创建方法。通过MATLABParamsmlParams对象的POST同步请求的响应体创建方法。

如果在执行部署的MATLAB函数时发生错误,则调用结果方法引发MATLABException包含MATLAB的错误信息。

MATLABResult mlResult;mlResult = MATLABResult。创建(mlParams, response.GetResponseStream()); try { double[,] result = mlResult.Result(); Console.WriteLine("Printing the 2-D array...\n"); PrintMagic(result); } catch (MATLABException e) { Console.WriteLine(e.ToString()); }

这个例子使用了一个helper方法PrintMagic将POST同步请求的响应体作为输入,并打印相应的二维魔方数组。

静态无效PrintMagic(double[,] magic) {int numDims = magic. rank;int[] dims = new int[numDims];For (int I = 0;i < numdim;i++) {dims[i] = magic.GetLength(i);} for (int j = 0;J < dim [0];j++) {for (int k = 0;K < dim [1];k++){控制台。Write(magic[j, k]); if (k < dims[1] - 1) { Console.Write(","); } } Console.WriteLine(); } }

运行c#应用程序将生成以下输出。

打印2-D数组…1、3 4、2

的示例代码MagicSync.cs下面是c#客户端。

代码:

MagicSync.cs

另请参阅

相关的话题