Следующий пример показывает вам, как реализовать Windows® Коммуникационная Основа (WCF) использование компонента безопасного с точки зрения типов интерфейса и интегрирует его в приложение.NET клиент-сервер.
Для дополнительного примера и правил преобразования данных относительно безопасных с точки зрения типов интерфейсов, смотрите Реализацию Безопасный с точки зрения типов Интерфейс и Объединяйтесь в Приложение.NET.
Для актуальной информации относительно WCF смотрите то, Что Является Windows Communication Foundation в Microsoft® документация.
Создайте свой 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
После того, как вы запишете и протестируете свой код MATLAB, разработаете интерфейс или в C# или в Visual Basic, который поддерживает нативные типы через API.
Открытый Microsoft Visual Studio® и создайте новый проект Class Library (.NET Framework) под названием IAddOne
.
В окне Solution Explorer в рамках Visual Studio переименуйте Class1.cs
файл к IAddOne.cs
. В этом файле запишите исходный код для интерфейса WCF, это получает доступ к компоненту.
В этом примере, IAddOne
интерфейс написан в C# и задает шесть перегрузок addOne
:
Обратите внимание на то, что в реализации WCF addOne
, вы украшаете методы OperationContract
свойство. Вы даете каждому методу уникальное имя операции, которое вы задаете с Name
свойство OperationContract
Примечание
При использовании WCF ваши перегруженные функции должны иметь уникальные имена.
Каждый метод в интерфейсе должен точно совпадать с развернутой функцией MATLAB. Все методы имеют вход того и один выход (чтобы совпадать с addOne
MATLAB функция), хотя тип и положение этих параметров варьируются.
Перейдите к Build> Configuration Manager и измените платформу от Any CPU до x64.
Разработайте проект с Microsoft Visual Studio. Файл IAddOne.dll
сгенерирован в папке сборки.
Примечание
Этот пример принимает, что ваш блок содержит только IAddOne
. Реалистично, это более вероятно тот IAddOne
уже будет часть скомпилированного блока. Блок может быть завершен даже, прежде чем функция MATLAB записана.
Приложение Library Compiler генерирует безопасный с точки зрения типов API, когда вы создаете свой компонент, если следующие опции выбраны.
Создайте проект Library Compiler и выберите .NET Assembly из списка Type.
Используйте следующие значения:
Имя библиотеки | AddOneComp |
ClassName | Mechanism |
Файл, чтобы скомпилировать | addOne.m |
Расширьте раздел Additional Runtime Settings.
В разделе Type-Safe API сделайте следующее:
Выберите Enable Type-Safe API.
В поле Interface assembly задайте местоположение блока интерфейса type-safe/WCF IAddOne.dll
то, что вы создали.
Выберите IAddOne
интерфейс от .NET interface выпадающее поле.
Совет
Если выпадающим является пробел, Library Compiler, возможно, не мог найти любые интерфейсы.NET в блоке, который вы выбрали.
Оставьте пробел полей Namespace и MEF metadata.
Задайте Mechanism
класс в поле Wrapped Class.
Нажмите кнопку Package, чтобы разработать проект.
Файл AddOneCompNative.dll
сгенерирован в for_redistribution_files_only
папка.
compiler.build.dotNETAssembly
Примечание
Если вы уже создали блок.NET с помощью приложения Library Compiler, можно пропустить этот раздел. Однако, если вы хотите знать, как создать блок.NET из окна команды MATLAB с помощью программируемого подхода, следовать этим инструкциям.
Сгенерировать безопасный с точки зрения типов API с вашей сборкой компонента с помощью compiler.build.dotNETAssembly
функция, завершите следующие шаги:
Создайте использование блока.NET compiler.build.dotNETAssembly
. Используйте аргументы name-value, чтобы задать имя сборки и имя класса.
compiler.build.dotNETAssembly('addOne.m', ... 'AssemblyName','AddOneComp', ... 'ClassName','Mechanism');
Перейдите к сгенерированному AddOneCompdotNETAssembly
директория.
Сгенерируйте безопасный с точки зрения типов API при помощи ntswrap
команда из MATLAB:
ntswrap('-c','AddOneComp.Mechanism', ... '-a','IAddOne.dll', ... '-i','IAddOne');
Не все аргументы совместимы друг с другом. Смотрите ntswrap
для деталей обо всех опциях команды.
Совет
Если IAddOne.dll
блок не находится в текущей папке, задайте полный путь.
Эта команда генерирует блок MechanismIAddOne.dll
это содержит безопасный с точки зрения типов API для класса MATLAB Compiler SDK™ Mechanism
в пространстве имен AddOneCompNative
.
Разработайте программу сервера, которая обеспечивает доступ (через WCFServiceContract
) к перегрузкам addOne
заданный IAddOne
WCF интерфейс. Программа ссылается
на App.config
Конфигурационный XML-файл.
Загрузки программы сервера WCF основанный на WCF addOne.Mechanism
компонент и делает его доступным для клиентов SOAP через безопасный с точки зрения типов mechanismIAddOne
интерфейс.
Совет
При записи интерфейса вы будете кодировать, чтобы обработать зубчатые массивы, в противоположность прямоугольным массивам. Для получения дополнительной информации смотрите Зубчатую Обработку матриц.
Скомпилируйте программу сервера с помощью Microsoft Visual Studio путем выполнения следующих шагов:
Открытый Microsoft Visual Studio и создает Console App (.NET Framework) C# по имени AddOneApp
.
Скопируйте следующий исходный код в сгенерированный Program.cs
в вашем проекте:
Добавьте следующий конфигурационный файл App.config
к вашему проекту. Вы, возможно, должны изменить перечисленную версию Среды.NET.
Добавьте ссылки в проекте к следующим файлам:
Эта ссылка: | Задает: |
---|---|
IAddOne.dll | Собственный компонент.NET вводит интерфейс IAddOne |
MechanismIAddOne.dll | Сгенерированный безопасный с точки зрения типов API |
AddOneCompNative.dll | Сгенерированный блок.NET |
Примечание
В отличие от других сценариев развертывания.NET, вы не должны ссылаться на MWArray.dll
в исходном коде программы сервера. MWArray
типы данных скрыты позади безопасного с точки зрения типов API в MechanismIAddOne
.
Добавьте ссылку на System.ServiceModel
, который перечислен под Assemblies.
Перейдите к Build> Configuration Manager и измените платформу от Any CPU до x64.
Скомпилируйте и запустите программу сервера с Microsoft Visual Studio.
Программа отображает следующий вывод:
Addition Server is up running...... Press any key to close the service.
Нажатие ключа приводит к следующему.
Closing service....
Сконфигурируйте свои клиенты, чтобы связаться с сервером путем выполнения автоматического инструмента svcutil.exe
генерации прокси. Большинство версий Microsoft Visual Studio может автоматически сгенерировать клиентский код прокси от метаданных сервера.
Внимание
Прежде чем вы сгенерируете свой клиентский код прокси с помощью этого шага, сервер должен быть доступным и рабочим. В противном случае клиент не найдет сервер.
Создайте клиентский проект в Microsoft Visual Studio.
Добавьте ссылки при помощи любого из этих двух методов.
Метод 1 | Метод 2 |
---|---|
|
|
Примечание
При выполнении самоприложения хоста можно столкнуться с проблемами с резервированием порта. Используйте инструмент netsh
изменить ваши конфигурации порта, по мере необходимости.
При запуске клиентская программа соединяется с AdditionService
если Addition
Сервис WCF. Вместо того, чтобы непосредственно вызвать методы безопасного с точки зрения типов механизма IAddOne
интерфейс, клиент WCF использует имена методов, заданные в OperationContract
атрибуты IAddOne
.
Скомпилируйте клиентскую программу с помощью Microsoft Visual Studio путем выполнения следующего:
Открытый Microsoft Visual Studio и создает Console App (.NET Framework) C# по имени AdditionClient
.
Скопируйте следующий исходный код в сгенерированный Program.cs
в вашем проекте:
Если вы уже не ссылаетесь на System.ServiceModel
, добавьте его в свой проект Visual Studio.
Перейдите к Build> Configuration Manager и измените платформу от Any CPU до x64.
Скомпилируйте клиентскую программу WCF с Microsoft Visual Studio.
Запустите программу из командной строки с доступом администратора.
Программа отображает следующий вывод:
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
свойство.
compiler.build.dotNETAssembly
| ntswrap
| Дистанционная работа.NET и Windows Communications Foundation | Безопасные с точки зрения типов интерфейсы