Создайте Windows Communications Foundation Component

Следующий пример показывает вам, как реализовать Windows® Коммуникационная Основа (WCF) использование компонента безопасного с точки зрения типов интерфейса и интегрирует его в приложение.NET клиент-сервер.

Для дополнительного примера и правил преобразования данных относительно безопасных с точки зрения типов интерфейсов, смотрите Реализацию Безопасный с точки зрения типов Интерфейс и Объединяйтесь в Приложение.NET.

Для актуальной информации относительно WCF смотрите то, Что Является Windows Communication Foundation в Microsoft® документация.

Запишите и протестируйте свой код MATLAB

Создайте свой MATLAB® программа и затем тестирует код прежде, чем реализовать безопасный с точки зрения типов интерфейс. Функции в вашей программе MATLAB должны совпадать с объявлениями в вашем нативном интерфейсе.NET.

В данном примере сохраните следующий код как addOne.m.

function y = addOne(x)
% Input must be either a scalar or a matrix of single or multiple dimensions

    if ~isnumeric(x)
        error('Input must be numeric. Input was %s.', class(x));
    end
    y = x + 1;

end

В командной строке MATLAB введите addOne([1,2,3]).

Выход:

     2     3     4

Реализуйте интерфейс WCF

После того, как вы запишете и протестируете свой код MATLAB, разработаете интерфейс или в C# или в Visual Basic, который поддерживает нативные типы через API.

  1. Открытый Microsoft Visual Studio® и создайте новый проект Class Library (.NET Framework) под названием IAddOne.

  2. В окне Solution Explorer в рамках Visual Studio переименуйте Class1.cs файл к IAddOne.cs. В этом файле запишите исходный код для интерфейса WCF, это получает доступ к компоненту.

    В этом примере, IAddOne интерфейс написан в C# и задает шесть перегрузок addOne:

     IAddOne.cs

    Обратите внимание на то, что в реализации WCF addOne, вы украшаете методы OperationContract свойство. Вы даете каждому методу уникальное имя операции, которое вы задаете с Name свойство OperationContract

    Примечание

    При использовании WCF ваши перегруженные функции должны иметь уникальные имена.

    Каждый метод в интерфейсе должен точно совпадать с развернутой функцией MATLAB. Все методы имеют вход того и один выход (чтобы совпадать с addOne MATLAB функция), хотя тип и положение этих параметров варьируются.

  3. Перейдите к Build> Configuration Manager и измените платформу от Any CPU до x64.

  4. Разработайте проект с Microsoft Visual Studio. Файл IAddOne.dll сгенерирован в папке сборки.

    Примечание

    Этот пример принимает, что ваш блок содержит только IAddOne. Реалистично, это более вероятно тот IAddOne уже будет часть скомпилированного блока. Блок может быть завершен даже, прежде чем функция MATLAB записана.

Создайте блок.NET Используя приложение Library Compiler

Приложение Library Compiler генерирует безопасный с точки зрения типов API, когда вы создаете свой компонент, если следующие опции выбраны.

  1. Создайте проект Library Compiler и выберите .NET Assembly из списка Type.

  2. Используйте следующие значения:

    Имя библиотекиAddOneComp
    ClassName Mechanism
    Файл, чтобы скомпилироватьaddOne.m

  3. Расширьте раздел Additional Runtime Settings.

    В разделе Type-Safe API сделайте следующее:

    1. Выберите Enable Type-Safe API.

    2. В поле Interface assembly задайте местоположение блока интерфейса type-safe/WCF IAddOne.dll то, что вы создали.

    3. Выберите IAddOne интерфейс от .NET interface выпадающее поле.

      Совет

      Если выпадающим является пробел, Library Compiler, возможно, не мог найти любые интерфейсы.NET в блоке, который вы выбрали.

    4. Оставьте пробел полей Namespace и MEF metadata.

    5. Задайте Mechanism класс в поле Wrapped Class.

  4. Нажмите кнопку Package, чтобы разработать проект.

    Файл AddOneCompNative.dll сгенерирован в for_redistribution_files_only папка.

Создайте блок.NET Используя compiler.build.dotNETAssembly

Примечание

Если вы уже создали блок.NET с помощью приложения Library Compiler, можно пропустить этот раздел. Однако, если вы хотите знать, как создать блок.NET из окна команды MATLAB с помощью программируемого подхода, следовать этим инструкциям.

Сгенерировать безопасный с точки зрения типов API с вашей сборкой компонента с помощью compiler.build.dotNETAssembly функция, завершите следующие шаги:

  1. Создайте использование блока.NET compiler.build.dotNETAssembly. Используйте аргументы name-value, чтобы задать имя сборки и имя класса.

    compiler.build.dotNETAssembly('addOne.m', ...
        'AssemblyName','AddOneComp', ...
        'ClassName','Mechanism');
    
  2. Перейдите к сгенерированному AddOneCompdotNETAssembly директория.

  3. Сгенерируйте безопасный с точки зрения типов API при помощи ntswrap команда из MATLAB:

    ntswrap('-c','AddOneComp.Mechanism', ...
            '-a','IAddOne.dll', ...
            '-i','IAddOne');

    Не все аргументы совместимы друг с другом. Смотрите ntswrap для деталей обо всех опциях команды.

    Совет

    Если IAddOne.dll блок не находится в текущей папке, задайте полный путь.

    Эта команда генерирует блок MechanismIAddOne.dll это содержит безопасный с точки зрения типов API для класса MATLAB Compiler SDK™ Mechanism в пространстве имен AddOneCompNative.

Разработайте программу сервера Используя интерфейс WCF

Разработайте программу сервера, которая обеспечивает доступ (через WCFServiceContract) к перегрузкам addOne заданный IAddOne WCF интерфейс. Программа ссылается на App.config Конфигурационный XML-файл.

Загрузки программы сервера WCF основанный на WCF addOne.Mechanism компонент и делает его доступным для клиентов SOAP через безопасный с точки зрения типов mechanismIAddOne интерфейс.

Совет

При записи интерфейса вы будете кодировать, чтобы обработать зубчатые массивы, в противоположность прямоугольным массивам. Для получения дополнительной информации смотрите Зубчатую Обработку матриц.

Скомпилируйте программу сервера с помощью Microsoft Visual Studio путем выполнения следующих шагов:

  1. Открытый Microsoft Visual Studio и создает Console App (.NET Framework) C# по имени AddOneApp.

  2. Скопируйте следующий исходный код в сгенерированный Program.cs в вашем проекте:

     Программа сервера WCF

  3. Добавьте следующий конфигурационный файл App.config к вашему проекту. Вы, возможно, должны изменить перечисленную версию Среды.NET.

     XML-файл App.config

  4. Добавьте ссылки в проекте к следующим файлам:

    Эта ссылка:Задает:
    IAddOne.dllСобственный компонент.NET вводит интерфейс IAddOne
    MechanismIAddOne.dllСгенерированный безопасный с точки зрения типов API
    AddOneCompNative.dllСгенерированный блок.NET

    Примечание

    В отличие от других сценариев развертывания.NET, вы не должны ссылаться на MWArray.dll в исходном коде программы сервера. MWArray типы данных скрыты позади безопасного с точки зрения типов API в MechanismIAddOne.

  5. Добавьте ссылку на System.ServiceModel, который перечислен под Assemblies.

  6. Перейдите к Build> Configuration Manager и измените платформу от Any CPU до x64.

  7. Скомпилируйте и запустите программу сервера с Microsoft Visual Studio.

    Программа отображает следующий вывод:

    Addition Server is up running......
    Press any key to close the service.
    

    Нажатие ключа приводит к следующему.

    Closing service....

Сгенерируйте код прокси для клиентов

Сконфигурируйте свои клиенты, чтобы связаться с сервером путем выполнения автоматического инструмента svcutil.exe генерации прокси. Большинство версий Microsoft Visual Studio может автоматически сгенерировать клиентский код прокси от метаданных сервера.

Внимание

Прежде чем вы сгенерируете свой клиентский код прокси с помощью этого шага, сервер должен быть доступным и рабочим. В противном случае клиент не найдет сервер.

  1. Создайте клиентский проект в Microsoft Visual Studio.

  2. Добавьте ссылки при помощи любого из этих двух методов.

    Метод 1Метод 2
    1. В панели Проводника Решений щелкните правой кнопкой по References.

    2. Выберите Add Service Reference. Диалоговое окно Add Service Reference появляется.

    3. В поле Address, введите: http://localhost:8001/Addition/

      Примечание

      Обязательно включайте / следующий Addition.

    4. В поле Namespace введите AdditionProxy.

    5. Нажмите OK.

    1. Введите следующую команду из своей директории клиентского приложения, чтобы сгенерировать AdditionProxy.cs, который содержит клиентский код прокси. Эта команда также генерирует конфигурационный файл App.config.svcutil.exe /t:code http://localhost:8001/AddMaster//out:AdditionProxy.cs /config:App.config

      Примечание

      Введите вышеупомянутую команду в одну линию без пропусков.

    2. Добавьте AdditionProxy.cs и App.config к вашему клиентскому проекту

Примечание

При выполнении самоприложения хоста можно столкнуться с проблемами с резервированием порта. Используйте инструмент netsh изменить ваши конфигурации порта, по мере необходимости.

Разработайте клиентскую программу Используя интерфейс WCF

При запуске клиентская программа соединяется с AdditionService если Addition Сервис WCF. Вместо того, чтобы непосредственно вызвать методы безопасного с точки зрения типов механизма IAddOne интерфейс, клиент WCF использует имена методов, заданные в OperationContract атрибуты IAddOne.

Скомпилируйте клиентскую программу с помощью Microsoft Visual Studio путем выполнения следующего:

  1. Открытый Microsoft Visual Studio и создает Console App (.NET Framework) C# по имени AdditionClient.

  2. Скопируйте следующий исходный код в сгенерированный Program.cs в вашем проекте:

     Клиентская программа WCF

  3. Если вы уже не ссылаетесь на System.ServiceModel, добавьте его в свой проект Visual Studio.

  4. Перейдите к Build> Configuration Manager и измените платформу от Any CPU до x64.

  5. Скомпилируйте клиентскую программу WCF с Microsoft Visual Studio.

  6. Запустите программу из командной строки с доступом администратора.

    Программа отображает следующий вывод:

    Conntecting to Addition Service through Http connection...
    Conntected to Addition Service...
    addOne(1) = 2
    addOne(16) = 17
    addOne(2) = 3
    addOne(495) = 496
    addOne([30 60 88]) = [31 61 89]
    addOne([0 2; 3 1]) = [1 3; 4 2]
    Press any key to close the client application.
    

    Нажатие ключа приводит к следующему:

    Closing client....

Советы

  • Если вы хотите использовать WCF, самый легкий способ сделать так через безопасный с точки зрения типов API.

  • WCF и дистанционная работа.NET не совместимы в том же проекте развертывания или компоненте.

  • Этот пример требует, чтобы оба клиент-сервера использовали размеры сообщения, больше, чем значения по умолчанию WCF. Для получения информации об изменении размера сообщения по умолчанию см., что статья MSDN расценивает maxreceivedmessagesize свойство.

Смотрите также

| | |

Похожие темы