Доступ к удаляемой сборке .NET с помощью Native .NET API: Магический квадрат

Зачем использовать Native .NET API?

После создания удаляемого компонента можно настроить серверное приложение и клиент с помощью собственного .NET API. Для получения дополнительной информации о выборе подходящего API для ваших потребностей в доступе см. раздел «Выбор доступа к сборке».

Некоторые причины, по которым вы можете использовать собственный .NET API вместо MWArray API:

  • Вы хотите передать аргументы и возвращаемые значения с помощью стандартных типов .NET, и вы или ваши пользователи не работают широко с типами данных, характерными для MATLAB®.

  • Вы хотите получить доступ к своему компоненту с клиентского компьютера без установленной версии MATLAB.

Для получения информации о доступе к компоненту с помощью MWArray API, см. Доступ к удаляемой сборке .NET с использованием MWArray.

Кодирование и создание приложения сервера хостинга и файла строения

В серверном приложении будет размещен удаленный компонент, созданный в разделе «Создание удаляемой сборки .NET».

Клиентское приложение, выполняемое в отдельном процессе, получит доступ к удаленному компоненту, размещенному в серверном приложении. Создайте сервер с помощью Microsoft® Визуальная студия® файл проекта MagicSquareServer\MagicSquareServer.csproj:

  1. Измените ссылку для сгенерированной сборки компонента на MagicSquareComp\for_redistribution_files_only\MagicSquareCompNative.dll.

  2. Выберите соответствующую платформу сборки.

  3. Выберите Debug или Release режим.

  4. Создайте MagicSquareServer проект.

  5. Предоставьте файл строения для MagicSquareServer.

Код MagicSquareServer

Код C # для сервера находится в файле MagicSquareServer\MagicSquareServer.cs. The MagicSquareServer.cs Код сервера показан здесь:

using System;
   using System.Runtime.Remoting;

   namespace MagicSquareServer
     {
       class MagicSquareServer
         {
           static void Main(string[] args)
             {
               RemotingConfiguration.Configure
                 (@"..\..\..\..\MagicSquareServer.exe.config");

               Console.WriteLine("Magic Square Server started...");

               Console.ReadLine();
             }
         }
     }
Этот код делает следующее:

  • Считывает связанный файл строения, чтобы определить имя компонента, который он будет разместить, протокол удаленного взаимодействия и форматирование сообщений, которые будут использоваться, а также время аренды для удаленного компонента.

  • Сигнализирует о том, что сервер активен и ожидает ввода возврата каретки перед завершением.

Строение MagicSquareServer

Файл строения для MagicSquareServer находится в файле MagicSquareServer\MagicSquareServer.exe.config. Весь строению файл, написанный в XML, показан здесь:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.runtime.remoting>
    <application>
      <service>
        <wellknown mode="SingleCall"
                   type="MagicSquareCompNative.MagicSquareClass,  
                         MagicSquareCompNative" 
                   objectUri="MagicSquareClass.remote" />
      </service>
      <lifetime leaseTime= "5M" renewOnCallTime="2M"
                leaseManagerPollTime="10S" />
      <channels>
        <channel ref="tcp" port="1234">    
          <serverProviders>            
            <formatter ref="binary" typeFilterLevel="Full" />
          </serverProviders>
        </channel>                
      </channels>     
    </application>
    <debug loadTypes="true"/>
  </system.runtime.remoting>
   </configuration>

Этот код задает:

  • Режим, в котором будет получен доступ к удаленному компоненту - в этом случае режим одиночного вызова

  • Имя удаленного компонента, сборки компонента и URI объекта (унифицированный идентификатор ресурса), используемый для доступа к удаленному компоненту

  • Время аренды удаленного компонента

  • Протокол удаленного взаимодействия (TCP/IP) и номер порта

  • Форматтер сообщений (binary) и разрешения для канала связи (full доверие)

  • Отладка сервера опции

Кодирование и создание клиентского приложения и файла строения

Клиентское приложение, выполняемое в отдельном процессе, получает доступ к удаленному компоненту, работающему в серверном приложении, созданном в приложениях Coding и Building the Hosting Server Application и Configuration File. Создайте удаленный клиент с помощью файла проекта Microsoft Visual Studio MagicSquareClient\MagicSquareClient.csproj. Чтобы создать удаленный клиент с помощью Microsoft Visual Studio:

  1. Измените ссылку для сгенерированной сборки компонента на MagicSquareComp\for_redistribution_files_only\MagicSquareCompNative.dll.

  2. Измените ссылку для сгенерированной сборки интерфейса на MagicSquareComp\for_redistribution_files_only\IMagicSquareCompNative.dll.

  3. Выберите соответствующую платформу сборки.

  4. Выберите Debug или Release режим.

  5. Создайте MagicSquareClient проект.

  6. Предоставьте файл строения для MagicSquareServer.

Код клиента MagicSquareClient

Код C # для клиента находится в файле MagicSquareClient\MagicSquareClient.cs. Код клиента показан здесь:

using System;
using System.Configuration;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;

using System.Collections;
using System.Runtime.Serialization.Formatters;
using System.Runtime.Remoting.Channels.Tcp;

using IMagicSquareCompNative;

namespace MagicSquareClient
{
  class MagicSquareClient
    {
      static void Main(string[] args)
        {
          try
            {
              RemotingConfiguration.Configure
                (@"MagicSquareClient.exe.config");
                
              String urlServer=
                ConfigurationSettings.AppSettings["MagicSquareServer"];

              IMagicSquareClassNative magicSquareComp=
                (IMagicSquareClassNative)Activator.GetObject
                  (typeof(IMagicSquareClassNative), urlServer);

              // Get user specified command line arguments or set default
              double arraySize= (0 != args.Length) 
                                ? Double.Parse(args[0]) : 4;

              // Compute the magic square and print the result
              double[,] magicSquare=
                          (double[,])magicSquareComp.makesquare(arraySize);

              Console.WriteLine("Magic square of order {0}\n", arraySize);

              // Display the array elements:
              for (int i = 0; i < (int)arraySize; i++)
                for (int j = 0; j < (int)arraySize; j++)
                  Console.WriteLine
                            ("Element({0},{1})= {2}", i, j, magicSquare[i, j]);
            }

          catch (Exception exception)
            {
              Console.WriteLine(exception.Message);
            }

          Console.ReadLine();
        }
    }
}

Этот код делает следующее:

  • Клиент считывает связанный файл строения, чтобы получить имя и местоположение удаляемого компонента.

  • Клиент создает экземпляры удаляемого объекта с помощью статического Activator.GetObject метод

  • С этого момента удаленный клиент вызывает методы на удаляемом компоненте так же, как и локальный метод компонента.

Строение MagicSquareClient

Файл строения для магического квадратного клиента находится в файле MagicSquareClient\MagicSquareClient.exe.config. Файл строения, записанный в XML, показан здесь:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="MagicSquareServer" 
            value="tcp://localhost:1234/MagicSquareClass.remote"/>    
  </appSettings>
  <system.runtime.remoting>
    <application>
      <channels>
        <channel name="MagicSquareChannel" ref="tcp" port="0">        
          <clientProviders>            
            <formatter ref="binary" />
          </clientProviders>
          <serverProviders>            
            <formatter ref="binary" typeFilterLevel="Full" />
          </serverProviders>            
        </channel>
      </channels>
    </application>
  </system.runtime.remoting>
</configuration>

Этот код задает:

  • Имя удаленного сервера компонентов и URI удаленного компонента (унифицированный идентификатор ресурса)

  • Протокол удаленного взаимодействия (TCP/IP) и номер порта

  • Форматтер сообщений (binary) и разрешения для канала связи (full доверие)

Запуск серверного приложения

Запустите сервер, выполнив следующие действия:

  1. Откройте DOS или UNIX® команда и cd на MagicSquareServer\bin\x86\v4.0\Debug.

  2. Выполняйте MagicSquareServer.exe. Вы увидите сообщение:

    Magic Square Server started...

Запуск клиентского приложения

Запустите клиент, выполнив следующие действия:

  1. Откройте командное окно DOS или UNIX и cdна MagicSquareClient\bin\x86\v4.0\Debug.

  2. Выполняйте MagicSquareClient.exe. После инициализации MATLAB Runtime вы увидите следующий выход:

    Magic square of order 4
    
    Element(0,0)= 16
    Element(0,1)= 2
    Element(0,2)= 3
    Element(0,3)= 13
    Element(1,0)= 5
    Element(1,1)= 11
    Element(1,2)= 10
    Element(1,3)= 8
    Element(2,0)= 9
    Element(2,1)= 7
    Element(2,2)= 6
    Element(2,3)= 12
    Element(3,0)= 4
    Element(3,1)= 14
    Element(3,2)= 15
    Element(3,3)= 1