看看.net core中的WCF
.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(); var app = builder.Build();app.UseServiceModel(builder =>{builder.AddService(typeof(ToDoService)).AddServiceEndpoint(new BasicHttpBinding(), "/ToDoService/basichttp") .AddServiceEndpoint(new WSHttpBinding(SecurityMode.Transport), "/ToDoService/WSHttps"); });var serviceMetadataBehavior = app.Services.GetRequiredService(); serviceMetadataBehavior.HttpGetEnabled = true;app.Run();[]public record Item{[]public string? Title { get; set; }[][]public string? Description { get; set; }[]public DateTime CreateOn { get; set; }[]public bool IsComplete { get; set; } = false;}[]public interface IToDoService{[]bool Add(Item item);[]List- GetList()
;[]bool Remove(string? title);}public class ToDoService : IToDoService{static List- _list = new List
- ();
public bool Add(Item item){item.CreateOn = DateTime.Now;_list.Add(item);return true;}public List- 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;}}
结果:

评论
