访问远程net程序集使用本机。net API:细胞和结构
为什么使用。net API与细胞数组和结构体?
使用MATLAB的。net表示®结构体和细胞阵列建议如果这些都是真的:
你有MATLAB函数与MATLAB服务器结构或单元格数据类型作为输入或输出
你不希望或需要安装MATLAB运行时在客户端机器上
本机MWArray
,MWStructArray
,MWCellArray
类的成员MathWorks.MATLAB.NET.Arrays.native
名称空间。
这个名称空间中的类名与类名相同MathWorks.MATLAB.NET.Arrays
。所不同的是,本机结构和细胞数组没有方法或属性要求MATLAB运行时。
的
文件夹的例子可以实践构建解决方案。金宝搏官方网站的matlabroot
\工具箱\ dotnetbuilder \ \和例子版本
\净NativeStructCellExample
文件夹包含本机结构和细胞的例子。
建立你的组件
这个案例展示了如何部署一个远程组件使用本机结构和细胞阵列。之前设置远程客户机和服务器代码,构建一个远程组件使用的指令创建远程net程序集。
本机。net细胞结构的例子
服务器应用程序主机远程组件。
客户端应用程序,运行在一个单独的过程,访问远程托管的服务器应用程序组件。构建的服务器微软®Visual Studio®项目文件NativeStructCellServer.csproj
:
改变参考生成的组件组装
。component_name
\ for_redistribution_files_only \component_name
Native.dll选择适当的构建平台。
选择调试或释放模式。
构建
NativeStructCellServer
项目。提供的配置文件
NativeStructCellServer
。服务器的c#代码文件NativeStructCellServer.cs
:使用系统;使用System.Collections.Generic;使用text;使用System.Runtime.Remoting;名称空间NativeStructCellServer{类NativeStructCellServer{静态void Main (string [] args) {RemotingConfiguration。配置(@“NativeStructCellServer.exe.config”);控制台。WriteLine (“NativeStructCell服务器开始…”);Console.ReadLine ();}}}
组件的主机的名称
使用远程协议和消息格式
租赁时间远程组件
此外,代码还表明服务器是活动的,并等待一个回车之前终止。
编码和构建客户端应用程序和配置文件
客户端应用程序,运行在一个单独的过程,访问远程组件运行在服务器应用程序内置的本机。net细胞结构的例子。建立远程客户端使用微软Visual Studio项目文件NativeStructCellClient \ NativeStructCellClient.csproj
。创建远程客户端使用微软Visual Studio:
改变参考生成的组件组装
。component_name
\ for_redistribution_files_only \component_name
Native.dll改变参考生成的界面组装
。component_name
\ for_redistribution_files_only \我component_name
Native.dll选择适当的构建平台。
选择调试或释放模式。
构建
NativeStructCellClient
项目。提供的配置文件
NativeStructCellClient
。
NativeStructCellClient代码
客户的c#代码文件NativeStructCellClient \ NativeStructCellClient.cs
:
这段代码如下:
客户端读取相关的配置文件的名称和位置远程组件。
客户端使用静态实例化远程对象
Activator.GetObject
方法从这一点上,远程客户端调用远程组件上的方法一样调用本地组件方法。
NativeStructCellClient配置文件
的配置文件NativeStructCellClient
在文件NativeStructCellClient \ NativeStructCellClient.exe.config
:
< ?xml version = " 1.0 " encoding = " utf - 8 " ? > <配置> < appSettings > <添加关键= value =“NativeStructCellServer tcp: / / localhost: 1236 / NativeStructCellClass。远程" / > < / appSettings > < system.runtime.remoting > <应用> <频道> <通道名称=“NativeStructCellChannel”ref =“tcp端口= " 0 " > < clientProviders > <格式化程序ref = "二元" / > < / clientProviders > < serverProviders > <格式化程序ref =“二进制”typeFilterLevel = "完整" / > < / serverProviders > < /频道> < /频道> < /应用程序> < / system.runtime.remoting > < /配置>
这个代码指定:
远程组件的名称服务器和远程组件URI(统一资源标识符)
远程协议(
TCP / IP
)和端口号消息格式器(
二进制
)和通信通道的权限(完整的
信任)
启动服务器应用程序
启动服务器,执行以下操作:
打开一个DOS或UNIX®命令窗口并导航到
NativeStructCellServer \ bin \ x86 \ v4.0 \调试
。运行
NativeStructCellServer.exe
。出现以下输出:事件1:初始化服务器,并将其发送给客户端结构:初始化空结构:名字:“地址:[]# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #活动3:部分初始化结构接收到服务器:名字:“地址:[1 x1 struct]地址字段初始化从客户机:街:3,苹果山驱动的城市:“纳蒂克”状态:“马”邮政编码:“01760 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #活动4:更新“名称”字段前发送回客户机结构:名字:“MathWorks的地址:[1 x1 struct] # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
从客户端应用程序
启动客户端通过做以下:
打开一个DOS或UNIX命令窗口并导航到
NativeStructCellClient \ bin \ x86 \ v4.0 \调试
。运行
NativeStructCellClient.exe
。后MATLAB运行时初始化时,出现以下输出:事件2:初始化结构在客户端应用程序:1 x1结构体数组字段:名称地址更新“地址”字段:1 x1结构体数组字段:街道城市国家邮政编码# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #事件5:最后的结构作为接收端:1 x1结构体数组字段:名称地址地址字段:1 x1结构体数组字段:街道城市国家邮政编码# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
编码和构建客户端应用程序和配置文件与本机MWArray MWStructArray, MWCellArray类
createEmptyStruct.m
初始化服务器上的结构并将其发送到客户端与MATLAB代码如下:
函数PartialStruct = createEmptyStruct (field_names)流(事件1:初始化服务器的结构和发送它来客户:\ n”);PartialStruct =结构(field_names {1},' ',field_names {2}, []);流(“初始化空结构:\ n \ n”);disp (PartialStruct);流(' \ n # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # \ n ');
updateField.m
从客户端接收部分更新结构和添加更多的数据,交给客户端之前,用下面的MATLAB代码:
函数FinalStruct = updateField (st, field_name)流(“\ nEVENT 3:部分初始化结构收到了通过服务器:\ n \ n”);disp (st);流(从客户的地址字段初始化:\ n \ n”);disp (st.Address);流(“# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # \ n ');流([“\ nEVENT 4:更新“”field_name,“‘场前发送回客户机结构:\ n \ n ']);圣(field_name) =“MathWorks”;FinalStruct =圣;disp (FinalStruct);流(' \ n # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # \ n ');
NativeStructCellClient.cs
创建客户端c#代码:
请注意
在这种情况下,您不需要MATLAB运行时系统上的路径。
使用系统;使用System.Collections.Generic;使用text;使用System.Runtime.Remoting;使用System.Configuration;使用MathWorks.MATLAB.NET.Arrays.native;使用INativeStructCellCompNative;/ /这是一个简单的示例,演示如何使用/ / MathWorks.MATLAB.NET.Arrays。本地包。名称空间NativeStructCellClient{类NativeStructCellClient{静态void Main (string [] args) {{RemotingConfiguration试试。配置(@“NativeStructCellClient.exe.config”);字符串urlServer = ConfigurationSettings。AppSettings (“NativeStructCellServer”); INativeStructCellClassNative nativeStructCell = (INativeStructCellClassNative)Activator.GetObject(typeof (INativeStructCellClassNative), urlServer); MWCellArray field_names = new MWCellArray(1, 2); field_names[1, 1] = "Name"; field_names[1, 2] = "Address"; Object[] o = nativeStructCell.createEmptyStruct(1,field_names); MWStructArray S1 = (MWStructArray)o[0]; Console.WriteLine("\nEVENT 2: Initialized structure as received in client applications:\n\n{0}" , S1); //Convert "Name" value from char[,] to a string since // there's no MWCharArray constructor // on server that accepts char[,] as input. char c = ((char[,])S1["Name"])[0, 0]; S1["Name"] = c.ToString(); MWStructArray address = want new MWStructArray(new int[] { 1, 1 }, new String[] { "Street", "City", "State", "Zip" }); address["Street", 1] = "3, Apple Hill Drive"; address["City", 1] = "Natick"; address["State", 1] = "MA"; address["Zip", 1] = "01760"; Console.WriteLine("\nUpdating the 'Address' field to :\n\n{0}", address); Console.WriteLine("\n#################################\n"); S1["Address",1] = address; Object[] o1 = nativeStructCell.updateField(1, S1, "Name"); MWStructArray S2 = (MWStructArray)o1[0]; Console.WriteLine("\nEVENT 5: Final structure as received by client:\n\n{0}" , S2); Console.WriteLine("\nAddress field: \n\n{0}" , S2["Address",1]); Console.WriteLine("\n#################################\n"); } catch (Exception exception) { Console.WriteLine(exception.Message); } Console.ReadLine(); } } }
NativeStructCellServer.cs
创建服务器c#代码:
使用系统;使用System.Collections.Generic;使用text;使用System.Runtime.Remoting;名称空间NativeStructCellServer{类NativeStructCellServer{静态void Main (string [] args) {RemotingConfiguration。配置(@“NativeStructCellServer.exe.config”);控制台。WriteLine (“NativeStructCell服务器开始…”);Console.ReadLine ();}}}