创建 C# 客户端
此示例说明如何编写 C# 应用程序来调用部署到 MATLAB® Production Server™MATLAB 函数。C# 应用程序使用 MATLAB Production Server .NET 客户端库。
.NET 应用程序编程人员通常执行此任务。本教程假设您的计算机上安装了 Microsoft® Visual Studio® 和 .NET。
创建 Microsoft Visual Studio 工程
打开 Microsoft Visual Studio。
点击 File > New > Project。
在新建工程对话框中,选择要使用的模板。例如,如果您想在 Visual Studio 2017 中创建一个 C# 控制台应用程序,请在左侧导航窗格中选择 Visual C# > Windows Desktop,然后选择 Console App (.Net Framework)。
在 Name 字段中输入工程的名称(例如,
Magic
)。点击确定。您的
Magic
源 shell 已创建,默认情况下通常名为Program.cs
。
创建对客户端运行库的引用
在您的 Magic
工程中创建对 MATLAB Production Server 客户端运行时库的引用。在 Microsoft Visual Studio 中,执行以下步骤:
在 Microsoft Visual Studio 内的 Solution Explorer 窗格中(通常在右侧),右键点击您的
Magic
工程,选择Add > Browse。浏览到 MATLAB Production Server .NET 客户端运行时库位置。
在本地 MATLAB Production Server 安装中,库位于
,其中$MPS_INSTALL
\client\dotnet
是安装 MATLAB Production Server 的位置。选择$MPS_INSTALL
MathWorks.MATLAB.ProductionServer.Client.dll
文件。客户端库也可以从以下网址下载:
https://www.mathworks.com/products/matlab-production-server/client-libraries.html
。点击确定。您的 Microsoft Visual Studio 工程现在引用了
MathWorks.MATLAB.ProductionServer.Client.dll
。
将 MATLAB 函数部署到服务器
编写一个 MATLAB 函数 mymagic
,使用 magic
(MATLAB) 函数创建一个幻方,将 mymagic
打包成一个名为 mymagic_deployed
的可部署存档,然后将其部署到服务器。函数 mymagic
接受单个 int
输入并以二维 double
数组的形式返回一个幻方。该示例假定服务器实例在 http://localhost:9910
上运行。
function m = mymagic(in)
m = magic(in);
有关创建存档并将其部署到服务器的信息,请参阅 针对 MATLAB Production Server 创建可部署存档 和 将存档部署至 MATLAB Production Server。
使用 C# 设计 .NET 接口
通过 .NET 接口从 .NET 客户端调用已部署的 MATLAB 函数 mymagic
。设计一个 C# 接口 Magic
来匹配 MATLAB 函数 mymagic
。
.NET 接口具有与 MATLAB 函数相同数量的输入和输出。
由于您在服务器上部署一个 MATLAB 函数,因此您在 C# 代码中定义了一个相应的 .NET 方法。
MATLAB 函数和 .NET 接口都处理相同的数据类型 - 输入类型
int
和输出类型 2-Ddouble
。在您的 C# 客户端程序中,使用接口
Magic
在CreateProxy
方法中指定代理对象引用的类型。CreateProxy
方法需要包含mymagic
函数的可部署存档的 URL (http://localhost:9910/mymagic_deployed
) 作为输入参量。
public interface Magic { double[,] mymagic(int in1); }
编写、构建和运行 .NET 应用程序
打开您之前创建的 Microsoft Visual Studio 工程
Magic
。在
Program.cs
选项卡中,粘贴以下代码。using System; using System.Net; using MathWorks.MATLAB.ProductionServer.Client; namespace Magic { public class MagicClass { public interface Magic { double[,] mymagic(int in1); } public static void Main(string[] args) { MWClient client = new MWHttpClient(); try { Magic me = client.CreateProxy<Magic> (new Uri("http://localhost:9910/mymagic_deployed")); double[,] result1 = me.mymagic(4); print(result1); } catch (MATLABException ex) { Console.WriteLine("{0} MATLAB exception caught.", ex); Console.WriteLine(ex.StackTrace); } catch (WebException ex) { Console.WriteLine("{0} Web exception caught.", ex); Console.WriteLine(ex.StackTrace); } finally { client.Dispose(); } Console.ReadLine(); } public static void print(double[,] x) { int rank = x.Rank; int[] dims = new int[rank]; for (int i = 0; i < rank; i++) { dims[i] = x.GetLength(i); } for (int j = 0; j < dims[0]; j++) { for (int k = 0; k < dims[1]; k++) { Console.Write(x[j, k]); if (k < (dims[1] - 1)) { Console.Write(","); } } Console.WriteLine(); } } } }
用于创建代理的 URL 值 (
"http://localhost:9910/mymagic_deployed"
) 包含三个部分。服务器地址 (
localhost
)。端口号 (
9910
)。存档名称 (
mymagic_deployed
)。
构建应用程序。点击 Build > Build Solution。
运行该应用程序。点击 Debug > Start Without Debugging。该程序返回以下控制台输出。
16,2,3,13 5,11,10,8 9,7,6,12 4,14,15,1