我们一起学习WCF 第一篇初识WCF(附源码供对照学习)
前言:去年由于工作需要我学习了wcf的相关知识,初期对wcf的作用以及为何用怎么样都是一知半解,也许现在也不是非常的清晰。但是通过项目对wcf的运用在脑海里面也算有了初步的模型。今天我就把我从开始wcf所遇到的困难以及解决方案一点点记下来,可能还有很多不足之处那我们一起共同学习。在学习之前我们有必要初步的看下百度百科对wcf的解释,让我们心中有这一个概念,然后建立项目,然后再次看概念,然后在去更深层的建立项目,然后再去理解这样反复的去做我相信可以做好wcf。那么下面我就会从初识wcf,wcf消息协定,文件传输,聊天室,wcf和socket的联合运用来写。不好之处大家提出来 我进行修正。
第一步:创建一个解决方案
创建一个解决方案我们需要创建4个类库
IService:契约层(也就是我们常说的接口层)
Service:服务层(实现契约层)
Hosting:服务端(可以理解为服务器)
Client:客户端(请求调用)
第二步:创建接口层

1 /// <summary> 2 /// 服务契约 3 /// </summary> 4 [ServiceContract] 5 public interface IWcfService 6 { 7 /// <summary> 8 /// 测试wcf方法 9 /// </summary> 10 /// <param name="Name">请求用户名</param> 11 /// <returns></returns> 12 [OperationContract] 13 string TestMethod(string Name); 14 }
注释1:[ServiceContract] 这个表示一种特性,告诉编译器该类型属于服务契约,同理[OperationContract] 告诉编译器该类型属于操作契约
注释2:记得引用ServiceModel
第三步:实现接口层

1 public class WcfService:IService.Interface.IWcfService 2 { 3 public string TestMethod(string Name) 4 { 5 return "Hello 我是:" + Name; 6 } 7 }
第四步:实现服务端

1 static void Main(string[] args) 2 { 3 Uri baseadress = new Uri("http://localhost:8080/"); 4 using (ServiceHost host = new ServiceHost(typeof (WcfService), baseadress)) 5 { 6 WSHttpBinding binding = new WSHttpBinding(); //绑定 7 binding.Security.Mode = SecurityMode.None; 8 host.AddServiceEndpoint(typeof(IWcfService), binding, ""); 9 ServiceMetadataBehavior mdBehavior = new ServiceMetadataBehavior() 10 { 11 HttpGetEnabled = true 12 }; 13 host.Description.Behaviors.Add(mdBehavior); 14 host.Opened += delegate 15 { 16 Console.WriteLine("服务启动"); 17 }; 18 try 19 { 20 host.Open(); 21 } 22 catch (Exception ep) 23 { 24 Console.WriteLine(ep.Message); 25 host.Abort(); 26 host.Close(); 27 } 28 Console.ReadKey(); 29 } 30 }
注释3:Uri baseadress=new Uri("http://localhost:8080/") baseadress表示一个基址(绝对地址) 区别于终结点地址(相对地址) 而最终地址是由(基址+终结点地址组成)
注释4:什么是终结点
终结点有三部分组成简称叫做ABC,A表示Address,B表示Binding,C表示Contract。
Address:终结点地址,就是相对地址,比喻现在终结点地址是“admin”,那么地址就会是http://localhost:8080/admin。当然也可以默认“”,根据自己实际情况作出决定
Binding:指定如何与终结点进行通信 包括这三种模式 传输协议(比喻TCP或HTTP) 消息文本(比喻2进制) 安全模式(SSL 或 SOAP )
Contract:就是我们自己定下的契约(就是接口)
注释5:
ServiceMetadataBehavior mdBehavior = new ServiceMetadataBehavior()
{
HttpGetEnabled = true
};
这句话的目的:为了能让客户端通过添加服务能找到这个服务所以对主机进行描述(没有这句话无法通过基址找到服务端)
第五步:运行服务端,客户端寻找基址
寻找基址
客户端运行结果:
这样第一篇关于wcf就介绍完毕了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?