.net core下迎来了WCF——CoreWCF1.0,做了一个最初级的Demo,尝尝鲜。
首先在NuGet中引入下面两个包
CoreWCF.Http
CoreWCF.Primitives
本demo是用WCF实现一个ToDoList的几个服务端方法,然后用创建客户端服务调用,代码如下:
WCF服务配置文件
{ "Urls": "http://localhost:5000;https://localhost:5001", "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*" }
WCF服务代码:
using CoreWCF; using System.Diagnostics.CodeAnalysis; using System.Runtime.Serialization; using CoreWCF.Configuration; using CoreWCF.Description; var builder = WebApplication.CreateBuilder(args); builder.WebHost.ConfigureKestrel((context, options) => { options.AllowSynchronousIO = true; }); builder.Services.AddServiceModelServices().AddServiceModelMetadata(); builder.Services.AddSingleton<IServiceBehavior, UseRequestHeadersForMetadataAddressBehavior>(); var app = builder.Build(); app.UseServiceModel(builder => { builder .AddService(typeof(ToDoService)) .AddServiceEndpoint<ToDoService, IToDoService>(new BasicHttpBinding(), "/ToDoService/basichttp") .AddServiceEndpoint<ToDoService, IToDoService>(new WSHttpBinding(SecurityMode.Transport), "/ToDoService/WSHttps"); }); var serviceMetadataBehavior = app.Services.GetRequiredService<ServiceMetadataBehavior>(); serviceMetadataBehavior.HttpGetEnabled = true; app.Run(); [DataContract] public record Item { [DataMember] public string? Title { get; set; } [DataMember] [AllowNull] public string? Description { get; set; } [DataMember] public DateTime CreateOn { get; set; } [DataMember] public bool IsComplete { get; set; } = false; } [ServiceContract] public interface IToDoService { [OperationContract] bool Add(Item item); [OperationContract] List<Item> GetList(); [OperationContract] bool Remove(string? title); } public class ToDoService : IToDoService { static List<Item> _list = new List<Item>(); public bool Add(Item item) { item.CreateOn = DateTime.Now; _list.Add(item); return true; } public List<Item> GetList() => _list; public bool Remove(string? title) { var item = _list.SingleOrDefault(s => s.Title == title); if (item != null) { return _list.Remove(item); } else { return false; } } }
创建调用项目,右键项目“添加”-“服务引用”,选择WCF Web Service,在启动WCF服务的情况下,执行下面图示:
引入ToDoService后会多一个Connected Services的文件夹,刚才一顿操作的产物。因为在服务端Item类是record类型,自动生成会把它变成class,这里需要手动改成record,方便输出时数据好看一些。
客户端代码,直接使用ToDoService:
using ToDoServiceReference; var client = new ToDoServiceClient(ToDoServiceClient.EndpointConfiguration.WSHttpBinding_IToDoService, "https://localhost:5001/ToDoService/WSHttps"); while (true) { Console.WriteLine("1、Add ToDo 2、Get ToDoList 3、Remove ToDo"); switch (Console.ReadLine()) { case "1": var addResult = await client.AddAsync(new AddRequest { item = new Item { Title = "title_" + DateTime.Now.ToString("yyyyMMddHHmmss"), Description = "description_" + DateTime.Now.ToString("yyyyMMddHHmmssffffff") } }); Console.WriteLine(addResult.AddResult); break; case "2": var listResult = await client.GetListAsync(new GetListRequest { }); foreach (var item in listResult.GetListResult) { Console.WriteLine(item); } break; case "3": var delResult = await client.RemoveAsync(new RemoveRequest { title = Console.ReadLine() }); Console.WriteLine(delResult.RemoveResult); break; default: Console.WriteLine("input error"); break; } }
结果:
想要更快更方便的了解相关知识,可以关注微信公众号 标签:core,Console,item,WCF,var,new,net,public From: https://www.cnblogs.com/axzxs2001/p/16950097.html