Перед выполнением этого примера необходимо помнить следующее:
Для использования функции WCF необходимо запустить по крайней мере Microsoft ® .NET Framework 3.5.
Если вы хотите использовать WCF, самый простой способ сделать это через тип-safe API.
WCF и .NET Remoting несовместимы в одном проекте или компоненте развертывания.
Пример в этой главе требует, чтобы и клиент, и сервер использовали размеры сообщений, превышающие значения по умолчанию WCF. Для получения информации об изменении размера сообщения по умолчанию см. статью MSDN о настройке maxreceivedmessagesize собственность.
Развертывание компонента на основе WCF требует опыта разработчика .NET, поскольку для этого требуется выполнение ряда расширенных задач программирования.
Чтобы развернуть компонент на основе WCF, выполните следующие общие действия.
Постройте свой компонент и создайте свой API-интерфейс безопасности
Разработка серверной программы с использованием интерфейса WCF
Создайте программу MATLAB ®, а затем протестируйте код перед внедрением интерфейса безопасности типа. Функции программы MATLAB должны соответствовать объявлениям в собственном интерфейсе .NET.
В следующем примере развертываемый код MATLAB содержит одну экспортированную функцию, addOne. addOne функция добавляет значение 1 к принятому входу. Ввод должен быть числовым, скаляром или матрицей одной или нескольких размерностей.
function y = addOne(x)
% ADDONE Add one to numeric input. Input must be numeric.
if ~isnumeric(x)
error('Input must be numeric. Input was %s.', class(x));
end
y = x + 1;
end
Примечание
addOne необходимо выполнить проверку типа во время выполнения, чтобы убедиться в правильности ввода.
После написания и тестирования кода MATLAB разработайте интерфейс в C # или Visual Basic, поддерживающий собственные типы через API .
Определение перегрузок IAddOne. Полные правила определения перегрузок интерфейса см. в разделе Реализация интерфейса безопасности типа.
Кроме того, при использовании WCF перегруженные функции должны иметь уникальные имена.
Отметим, что в WCF внедрение addOne, вы украшаете методы с OperationContract собственность. Каждому методу присваивается уникальное имя операции, указанное с помощью Name имущество OperationContract, как в этом примере:
using System.ServiceModel;
[ServiceContract]
public interface IAddOne
{
[OperationContract(Name = "addOne_1")]
int addOne(int x);
[OperationContract(Name = "addOne_2")]
void addOne(ref int y, int x);
[OperationContract(Name = "addOne_3")]
void addOne(int x, ref int y);
[OperationContract(Name = "addOne_4")]
System.Double addOne(System.Double x);
[OperationContract(Name = "addOne_5")]
System.Double[] addOne(System.Double[] x);
[OperationContract(Name = "addOne_6")]
System.Double[][] addOne(System.Double[][] x);
}
Как видите, IAddOne интерфейс определяет шесть перегрузок addOne функция. Также обратите внимание, что все имеют один вход и один выход (для соответствия MATLAB addOne функция), хотя тип и положение этих параметров различаются.
Дополнительные фрагменты кода и правила преобразования данных относительно интерфейсов безопасности типа см. в разделе Реализация интерфейса безопасности типа.
Последние сведения о WCF см. в разделе Что такое Windows Communication Foundation на веб-странице Microsoft.
Скомпилировать IAddOne в сборку. Собрать IAddOne.cs в сборку с помощью Microsoft Visual Studio ® .
Примечание
В этом примере предполагается, что сборка содержит только IAddOne. Реально, более вероятно, что IAddOne уже будет частью скомпилированной сборки. Сборка может быть завершена еще до записи функции MATLAB.
Используйте приложение Library Compiler или средства командной строки развертывания для создания API безопасности типа.
Использование компилятора библиотеки. Приложение Library Compiler создает API-интерфейс безопасности типа при построении компонента, если выбраны правильные параметры.
Создайте проект.
При определении проекта используйте следующие значения:
| Название проекта | AddOneComp |
| Имя класса | Mechanism |
| Файл для компиляции | addOne |
Примечание
Не нажимайте кнопку «Пакет» в данный момент.
Разверните раздел Дополнительные параметры времени выполнения.
На вкладке Type-Safe API выполните следующие действия.
Выберите Enable Type-Safe API.
В поле Сборка интерфейса укажите расположение сборки интерфейса типа safe/WCF.
Выбрать IAddOne из раскрывающегося списка интерфейса .NET. Имя интерфейса обычно имеет префикс I.
Совет
Если раскрывающийся список пуст, приложению компилятора библиотеки не удалось найти интерфейсы .NET в выбранной сборке. Выберите другую сборку.
Определить Mechanism, в качестве имени класса, в которое должен переноситься сгенерированный API, в поле «Класс с оболочкой».
Примечание
Оставьте поле Namespace пустым.
Создайте проект как обычно, нажав кнопку Пакет.
Использование инструментов командной строки развертывания. Создание безопасного для типов API с помощью сборки (компиляции) компонента mcc, выполните следующие действия:
Создайте компонент, введя следующую команду из MATLAB:
mcc -v -B 'dotnet:AddOneComp,Mechanism,3.5,private,local'
addOne
См. раздел mcc на этой странице содержится подробная информация об указанных параметрах.
Создайте API безопасности типа, введя следующую команду из MATLAB:
ntswrap -c AddOneComp.Mechanism -i IAddOne -a IAddOne.dll
где:
-c указывает имя сборки SDK™ компилятора MATLAB, определяемое пространством имен, которое должно быть заключено в API, защищенный от типов. Если область действия компонента соответствует пространству имен, укажите полное имя пространства имен (AddOneComp.Mechanism в примере). Поскольку пространство имен не указано ntswrap, класс интерфейса type-safe появляется в глобальном пространстве имен.
-i указывает имя интерфейса .NET, определяющего API для защиты от типов. Имя интерфейса обычно имеет префикс I.
-a указывает абсолютный или относительный путь к сборке, содержащей статически типизированный интерфейс .NET, на который ссылается -i переключатель.
Совет
Если сборка содержит интерфейс .NET IAddOne отсутствует в текущей папке, укажите полный путь.
Внимание
Не все аргументы совместимы друг с другом. См. раздел ntswrap для получения подробной информации обо всех параметрах команды.
Вы создали свой компонент и создали совместимый с WCF API-интерфейс безопасности.
Затем разработайте серверную программу, предоставляющую доступ (через WCFServiceContract) к перегрузкам addOne определяется WCF IAddOne интерфейс. Программа ссылается на App.config Файл конфигурации XML.
Программа сервера WCF загружает файл на основе WCF addOne.Mechanism компонент и делает его доступным для клиентов SOAP через тип-safe mechanismIAddOne интерфейс.
Сведения об обработке массива с зазубринами
При написании интерфейса вы будете кодировать для обработки зазубренных массивов, а не прямоугольных. Дополнительные сведения о зубчатых массивах см. в разделе Обработка зазубренных массивов в этой документации.
Скомпилировать серверную программу с помощью Microsoft Visual Studio, выполнив следующие действия:
Создание проекта Microsoft Visual Studio с именем AddMaster.
Добавить AddMasterServer.cs и App.config (файл конфигурации, созданный на предыдущем шаге) в проект.
Добавьте ссылки в проект к следующим файлам.
| Эта ссылка: | Определяет: |
|---|---|
IAddOne.dll | Интерфейс собственного типа .NET IAddOne |
MechanismIAddOne.dll | Созданный API-интерфейс безопасности типа |
AddOneCompNative.dll | Созданная сборка |
Примечание
В отличие от других сценариев развертывания .NET нет необходимости ссылаться на MWArray.dll в исходном коде программы сервера. MWArray типы данных скрыты за безопасным для типов API в MechanismIAddOne.
Если вы еще не ссылаетесь System.ServiceModelдобавьте его в проект Visual Studio.
Скомпилировать программу с помощью Microsoft Visual Studio.
Запустите серверную программу из командной строки.
Выходные данные должны выглядеть следующим образом.
AddMaster Server is up running...... Press any key to close the service.
Нажатие клавиши приводит к следующему.
Closing service....
Настройте взаимодействие клиентов с сервером, запустив средство автоматического создания прокси-сервера. svcutil.exe. Большинство версий Microsoft Visual Studio могут автоматически создавать прокси-код клиента из метаданных сервера.
Внимание
Перед созданием прокси-кода клиента с помощью этого шага сервер должен быть доступен и запущен. В противном случае клиент не найдет сервер.
Создание клиентского проекта в Microsoft Visual Studio.
Добавьте ссылки, используя один из этих двух методов. Для получения информации об изменении конфигураций портов см. Резервирование портов и использование localhost 8001.
| Метод 1 | Метод 2 |
|---|---|
|
|
Резервирование портов и использование localhost 8001. При запуске самостоятельного приложения могут возникнуть проблемы с резервированием портов. При необходимости измените конфигурации портов с помощью одного из приведенных ниже инструментов.
| если вы бежите.... | Используйте этот инструмент для изменения конфигураций портов.... |
|---|---|
| Windows ® XP | httpcfg |
| Vista™ Windows | netsh |
| Windows 7 | netsh |
Клиентская программа отличается от AddMaster.cs серверная программа следующим образом:
При запуске эта программа подключается к AddMasterService предоставлены AddMaster Услуга WCF.
Вместо непосредственного вызова методов механизма безопасности типа IAddOne , клиент WCF использует имена методов, определенные в OperationContract атрибуты IAddOne.
Скомпилировать клиентскую программу, выполнив следующие действия:
Добавить код клиента (AddMasterClient.cs) в проект Microsoft Visual Studio.
Если вы еще не ссылаетесь System.ServiceModelдобавьте его в проект Visual Studio.
Скомпилировать клиентскую программу WCF в Visual Studio.
Запустите клиентскую программу из командной строки.
Выходные данные должны быть аналогичны следующим:
Conntecting to AddMaster Service through Http connection... Conntected to AddMaster 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....