.NET Core 的 WCF dotnet-svcutil 工具WCF dotnet-svcutil tool for .NET Core

本文内容

Windows Communication Foundation (WCF) dotnet-svcutil 工具是一种 .NET Core CLI 工具,此工具从网络位置上的 Web 服务中或从 WSDL 文件中检索元数据,并生成包含访问 Web 服务操作的客户端代理方法的 WCF 类。

类似于 .NET Framework 项目的服务模型元数据 - svcutil 工具,dotnet svcutil 是用于生成 Web 服务引用的命令行工具,与 .NET Core 和 .NET Standard 项目兼容。

dotnet-svcutil 工具是 WCF Web 服务引用 Visual Studio 连接服务提供程序(随 Visual Studio 2017 v15.5 首次推出)的替代选项。dotnet-svcutil 工具作为一种 .NET Core CLI 工具,可跨平台地用于 Linux、macOS 和 Windows。

重要

应仅从受信任源引用服务。从不受信任的源添加引用可能会危及安全性。

系统必备Prerequisites

入门Getting started

下面的示例将指导你完成将 Web 服务引用添加到 .NET Core Web 项目并调用该服务所需的步骤。将创建名为“HelloSvcutil” 的 .NET Core Web 应用程序,并将引用添加到实现以下协定的 Web 服务:

  1. [ServiceContract]
  2. public interface ISayHello
  3. {
  4. [OperationContract]
  5. string Hello(string name);
  6. }

在此示例中,我们假定 Web 服务托管在以下地址中:http://contoso.com/SayHello.svc

从 Windows、macOS 或 Linux 命令窗口执行以下步骤:

  • 为项目创建一个名为“HelloSvcutil” 的目录,并将其设置为当前目录,如以下示例所示:
  1. mkdir HelloSvcutil
  2. cd HelloSvcutil
  • 在该目录中使用 dotnet new 命令创建新的 C# Web 项目,如下所示:
  1. dotnet new web
  1. dotnet tool install --global dotnet-svcutil

在编辑器中打开 HelloSvcutil.csproj 项目文件,编辑 Project 元素,并使用下面的代码添加 dotnet-svcutil NuGet 包作为 CLI 工具引用:

  1. <ItemGroup>
  2. <DotNetCliToolReference Include="dotnet-svcutil" Version="1.0.*" />
  3. </ItemGroup>

然后使用 dotnet restore 命令还原 dotnet-svcutil 包,如下所示:

  1. dotnet restore
  • 运行 dotnet-svcutil 命令生成 Web 服务引用文件,如下所示:
  1. dotnet-svcutil http://contoso.com/SayHello.svc
  1. dotnet svcutil http://contoso.com/SayHello.svc

生成的文件保存为 HelloSvcutil/ServiceReference/Reference.csdotnet-svcutil 工具还向项目添加代理代码所需的适当 WCF 包作为包引用。

使用服务引用Using the Service Reference

  1. dotnet restore
  • 找到要使用的客户端类和操作的名称。Reference.cs 将包含一个继承自 System.ServiceModel.ClientBase 的类,其方法可用于调用服务上的操作。在本例中,想要调用 SayHello 服务的 Hello 操作。ServiceReference.SayHelloClient 是客户端类的名称,它有一个名为 HelloAsync 的方法,可用于调用该操作。

  • 在编辑器中打开 Startup.cs 文件,并在顶部为服务引用命名空间添加一个 using 语句:

  1. using ServiceReference;
  • 编辑 Configure 方法来调用 Web 服务。为此,可以创建一个继承自 ClientBase 的类的实例,并在客户端对象上调用此方法:
  1. public void Configure(IApplicationBuilder app, IHostingEnvironment env)
  2. {
  3. if (env.IsDevelopment())
  4. {
  5. app.UseDeveloperExceptionPage();
  6. }
  7. app.Run(async (context) =>
  8. {
  9. var client = new SayHelloClient();
  10. var response = await client.HelloAsync();
  11. await context.Response.WriteAsync(response);
  12. });
  13. }
  • 使用 dotnet run 命令运行应用程序,如下所示:
  1. dotnet run

您应看到以下输出:“Hello dotnet-svcutil!”

有关 dotnet-svcutil 工具参数的详细说明,请调用传递帮助参数的工具,如下所示:

  1. dotnet-svcutil --help
  1. dotnet svcutil --help

反馈和问题Feedback & questions

如果有任何问题或反馈,请在 GitHub 上提问也可以在 GitHub 上的 WCF 存储库中查看任何现有问题。

发行说明Release notes

  • 请参阅发行说明,了解更新的版本信息(包括已知问题)。

信息Information