在 .NET Core 上使用 dotnet-svcutil.xmlserializerUsing dotnet-svcutil.xmlserializer on .NET Core

本文内容

dotnet-svcutil.xmlserializer NuGet 包可以为 .NET Core 项目预生成序列化程序集。它为客户端应用程序中由 WCF 服务协定使用的且可由 XmlSerializer 序列化的类型预生成 C# 序列化代码。当序列化或反序列化这些类型的对象时,这会提高 XML 序列化的启动性能。

系统必备Prerequisites

  • .NET Core 2.1 SDK 或更高版本
  • 你最喜欢的代码编辑器可以使用命令 dotnet —info 检查已安装哪些版本的 .NET Core SDK 和运行时。

入门Getting started

在 .NET Core 控制台应用程序中使用 dotnet-svcutil.xmlserializer

  • 在 .NET Framework 中使用默认模板“WCF 服务应用程序”创建一个名为“MyWCFService”的 WCF 服务。在服务方法上添加 [XmlSerializerFormat] 属性,如下所示:
  1. [ServiceContract]
  2. public interface IService1
  3. {
  4. [XmlSerializerFormat]
  5. [OperationContract(Action = "http://tempuri.org/IService1/GetData", ReplyAction = "http://tempuri.org/IService1/GetDataResponse")]
  6. string GetData(int value);
  7. }
  • 创建 .NET Core 控制台应用程序作为面向 .NET Core 2.1 或更高版本的 WCF 客户端应用程序。例如,使用以下命令创建名为“MyWCFClient”的应用:
  1. dotnet new console --name MyWCFClient

要确保项目面向 .NET Core 2.1 或更高版本,请检查项目文件中的 TargetFramework XML 元素:

  1. <TargetFramework>netcoreapp2.1</TargetFramework>
  • 通过运行以下命令将包引用添加到 System.ServiceModel.Http
  1. dotnet add package System.ServiceModel.Http
  • 添加 WCF 客户端代码:
  1. using System.ServiceModel;
  2. class Program
  3. {
  4. static void Main(string[] args)
  5. {
  6. var myBinding = new BasicHttpBinding();
  7. var myEndpoint = new EndpointAddress("http://localhost:2561/Service1.svc"); //Fill your service url here
  8. var myChannelFactory = new ChannelFactory<IService1>(myBinding, myEndpoint);
  9. IService1 client = myChannelFactory.CreateChannel();
  10. string s = client.GetData(1);
  11. ((ICommunicationObject)client).Close();
  12. }
  13. }
  14. [ServiceContract]
  15. public interface IService1
  16. {
  17. [XmlSerializerFormat]
  18. [OperationContract(Action = "http://tempuri.org/IService1/GetData", ReplyAction = "http://tempuri.org/IService1/GetDataResponse")]
  19. string GetData(int value);
  20. }
  • 通过运行以下命令将引用添加到 dotnet-svcutil.xmlserializer 包:
  1. dotnet add package dotnet-svcutil.xmlserializer

运行该命令应向项目文件中添加一个类似于以下内容的条目:

  1. <ItemGroup>
  2. <DotNetCliToolReference Include="dotnet-svcutil.xmlserializer" Version="1.0.0" />
  3. </ItemGroup>
  • 通过运行 dotnet build 生成应用程序。如果一切顺利,则会在输出文件夹中生成名为“MyWCFClient.XmlSerializers.dll”的程序集 。如果该工具无法生成程序集,将在生成输出中看到警告。

  • 例如,通过在浏览器中运行 http://localhost:2561/Service1.svc 来启动 WCF 服务。然后启动客户端应用程序,它将在运行时自动加载和使用预生成的序列化程序。