Этот пример показывает, как вызвать развернутую функцию MATLAB® из приложения C# с помощью MATLAB Production Server™.
В вашем коде C# вы должны:
Создайте проект Microsoft® Visual Studio®.
Создайте ссылку на клиентскую библиотеку времени выполнения.
Разработайте интерфейс.NET в C#.
Запишите, создайте и запустите приложение C#.
Эта задача обычно выполняется прикладным программистом.NET. Эта часть примера принимает, что вам установили Microsoft Visual Studio и.NET на вашем компьютере.
Открытый Microsoft Visual Studio.
Нажмите File > New > Project.
В диалоговом окне Нового проекта выберите тип проекта и обработайте вас по шаблону, хотят использовать. Например, если вы хотите создать Консольное приложение C#, выберите Windows в ответвлении Visual C# панели Project Type и выберите шаблон C# Console Application из панели Templates.
Введите имя проекта в поле Name (Magic
, например).
Нажмите OK. Ваш исходный интерпретатор Magic
создают, обычно называют Program.cs
по умолчанию.
Создайте ссылку в своем коде MainApp
к клиентской библиотеке времени выполнения MATLAB Production Server. В Microsoft Visual Studio выполните следующие шаги:
В панели Проводника Решения в Microsoft Visual Studio (обычно на правой стороне), выберите имя своего проекта, Magic
, подсветив его.
Щелкните правой кнопкой по Magic
и выберите Add Reference.
В диалоговом окне Add Reference выберите вкладку Browse. Просмотрите к клиентскому времени выполнения MATLAB Production Server, установленному в
. Выберите $MPS_INSTALL\client\dotnet
MathWorks.MATLAB.ProductionServer.Client.dll
.
Нажмите OK. на MathWorks.MATLAB.ProductionServer.Client.dll
теперь ссылается ваш проект Microsoft Visual Studio.
В этом примере вы вызываете mymagic.m
, размещенный сервером, от клиента.NET, через интерфейс.NET.
Чтобы совпадать с функцией MATLAB mymagic.m
, разработайте интерфейс под названием Magic
.
Например, интерфейс для функции mymagic
:
function m = mymagic(in) m = magic(in);
может выглядеть так:
public interface Magic { double[,] mymagic(int in1); }
Отметьте следующее:
Интерфейс.NET имеет то же количество вводов и выводов как функция MATLAB.
Вы развертываете одну функцию MATLAB, поэтому вы задаете один соответствующий метод.NET в своем коде C#.
И функция MATLAB и интерфейс.NET обрабатывают те же типы: введите вводят int
, и вывод вводят двумерный double
.
Вы задаете имя своего развертываемого архива (magic
, который находится в вашей папке auto_deploy
) в вашем URL, когда вы вызываете CreateProxy
(
)."http://localhost:9910/magic"
Создайте интерфейс C# под названием Magic
в Microsoft Visual Studio путем выполнения следующего:
Откройте проект Microsoft Visual Studio, MagicSquare
, который вы создали ранее.
Во вкладке Program.cs
вставьте в коде ниже.
Значение URL ("http://localhost:9910/mymagic_deployed"
), используемый, чтобы создать прокси, содержит три части:
адрес сервера (localhost
).
номер порта (9910
).
архивное имя (mymagic_deployed
)
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(); } } } }
Создавание приложения. Нажмите Build > Build Solution.
Запустите приложение. Нажмите Debug > Start Without Debugging. Программа возвращает следующую консоль вывод:
16,2,3,13 5,11,10,8 9,7,6,12 4,14,15,1