主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

创建 Windows Communications Foundation 组件

下面的示例展示如何使用类型安全接口实现 Windows® Communications Foundation (WCF) 组件并将其集成到客户端-服务器 .NET 应用程序中。

有关类型安全接口的其他示例和数据转换规则,请参阅实现类型安全接口并集成到 .NET 应用程序中

有关 WCF 的最新信息,请参阅 Microsoft® 文档中的什么是 Windows Communication Foundation

编写并测试您的 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® 并创建一个名为 IAddOne 的新 Class Library (.NET Framework) 工程。

  2. 在 Visual Studio 的解决方案资源管理器窗口中,将 Class1.cs 文件重命名为 IAddOne.cs。在此文件中,编写访问组件的 WCF 接口的源代码。

    在此示例中,IAddOne 接口用 C# 编写,并指定了 addOne 的六个重载:

     IAddOne.cs

    请注意,在 addOne 的 WCF 实现中,您使用 OperationContract 属性来修饰该方法。您为每个方法赋予一个唯一的操作名称,该名称是通过 NameOperationContract 属性指定的。

    注意

    使用 WCF 时,重载函数必须具有唯一的名称。

    接口中的每个方法必须与部署的 MATLAB 函数完全匹配。所有方法都有一个输入和一个输出(以匹配 MATLAB addOne 函数),尽管这些参数的类型和位置各不相同。

  3. 转到 Build > Configuration Manager 并将平台从 Any CPU 更改为 x64

  4. 使用 Microsoft Visual Studio 构建工程。在构建文件夹中生成文件 IAddOne.dll

    注意

    此示例假设您的程序集仅包含 IAddOne。实际上,IAddOne 更有可能已经是已编译程序集的一部分。甚至在编写 MATLAB 函数之前,汇编可能就已经完成了。

使用 compiler.build.dotNETAssembly 创建 .NET 程序集

要使用 compiler.build.dotNETAssembly 函数在组件构建中生成类型安全的 API,请完成以下步骤:

  1. 使用 compiler.build.dotNETAssembly 构建 .NET 程序集。使用名称-值参量指定程序集名称和类名。

    compiler.build.dotNETAssembly('addOne.m', ...
        'AssemblyName','AddOneComp', ...
        'ClassName','Mechanism');
    
  2. 导航到生成的 AddOneCompdotNETAssembly 目录。

  3. 使用 MATLAB 中的 ntswrap 命令生成类型安全的 API:

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

    并非所有参量都是互相兼容的。有关所有命令选项的详细信息,请参阅 ntswrap

    提示

    如果 IAddOne.dll 程序集不在当前文件夹中,请指定完整路径。

    此命令生成程序集 MechanismIAddOne.dll,其中包含命名空间 MechanismMATLAB Compiler SDK™AddOneCompNative 的类型安全 API。

使用 WCF 接口开发服务器程序

开发一个服务器程序,通过 WCFServiceContract 提供对 WCF addOne 接口定义的 IAddOne 重载的访问。该程序引用了 App.config XML 配置文件。

WCF 服务器程序加载基于 WCF 的 addOne.Mechanism 组件,并通过类型安全的 mechanismIAddOne 接口使其可供 SOAP 客户端使用。

提示

当编写界面时,您将编写代码来处理锯齿状数组,而不是矩形数组。有关详细信息,请参阅锯齿状数组处理

使用 Microsoft Visual Studio 编译服务器程序,步骤如下:

  1. 打开 Microsoft Visual Studio 并创建一个名为 AddOneApp 的 C# Console App (.NET Framework)

  2. 将以下源代码复制到工程中生成的 Program.cs 中:

     WCF 服务器程序

  3. 将以下配置文件 App.config 添加到您的工程。您可能需要修改列出的 .NET Framework 版本。

     App.config XML 文件

  4. 在工程中添加对以下文件的引用:

    此引用:定义:
    IAddOne.dll.NET 本机类型接口 IAddOne
    MechanismIAddOne.dll生成的类型安全 API
    AddOneCompNative.dll生成的 .NET 程序集

    注意

    与其他 .NET 部署场景不同,您不需要在服务器程序源代码中引用 MWArray.dllMWArray 数据类型隐藏在 MechanismIAddOne 中类型安全的 API 后面。

  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。出现添加服务引用对话框。

    3. Address 字段中输入:http://localhost:8001/Addition/

      注意

      请确保在 / 后面包含 Addition

    4. Namespace 字段中,输入 AdditionProxy

    5. 点击确定

    1. 从客户端应用程序目录输入以下命令来生成 AdditionProxy.cs,其中包含客户端代理代码。此命令还生成配置文件 App.config

      svcutil.exe /t:code http://localhost:8001/Addition//out:AdditionProxy.cs /config:App.config

      注意

      在一行中输入上述命令,不要间断。

    2. AdditionProxy.csApp.config 添加到您的客户端工程

注意

运行自托管应用程序时,您可能会遇到端口预留问题。根据需要,使用工具 netsh 修改端口配置。

使用 WCF 接口开发客户端程序

在启动时,客户端程序连接到 AdditionService WCF 服务提供的 Addition。WCF 客户端不直接调用类型安全机制 IAddOne 接口的方法,而是使用 OperationContractIAddOne 属性中定义的方法名称。

通过执行以下操作,使用 Microsoft Visual Studio 编译客户端程序:

  1. 打开 Microsoft Visual Studio 并创建一个名为 AdditionClient 的 C# Console App (.NET Framework)

  2. 将以下源代码复制到工程中生成的 Program.cs 中:

     WCF 客户端程序

  3. 如果您尚未引用 System.ServiceModel,请将其添加到您的 Visual Studio 工程中。

  4. 转到 Build > Configuration Manager 并将平台从 Any CPU 更改为 x64

  5. 使用 Microsoft Visual Studio 编译 WCF 客户端程序。

  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 默认值的消息大小。有关更改默认消息大小的信息,请参阅有关 maxreceivedmessagesize 属性的 MSDN 文章。

另请参阅

| | |

主题