Visual Studio2012中搭建WCF项目
2015-03-18 14:57 Evan.Pei 阅读(431) 评论(0) 编辑 收藏 举报分布式系统:指在系统与系统之间进行通信,系统不再是孤立的,例如:淘宝查看物流信息,或是hao123的天气预报,这些可能都是用的别的系统的web方法。
1.创建空的解决方案
2.新建项目-WCF服务库项目,项目名称:XfrogWCFService
3.在XfrogWCFService项目中添加[System.ServiceModel]的引用
4.上图是该项目的结构打开IFirstServices.cs这个是接口也是一个服务契约,客户端调用方法都必须遵守,代码如下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.ServiceModel; namespace XfrogWCFService { /// <summary> /// 注意在接口上申明了ServiceContract特性,即服务契约,表明该接口是一个服务 /// </summary> [ServiceContract] public interface IFirstService { /// <summary> /// 表示该方法是IFirstService的一个服务方法,客户端可远程调用该方法。 /// </summary> /// <param name="name"></param> /// <returns></returns> [OperationContract] String GetData( int a, int b); } } |
5.再打开FiretService.cs这个文件对接口进行实现,也就是Web方法所要实现的功能,为了学习,做了一个两数相加的操作,代码如下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace XfrogWCFService { public class FirstService : IFirstService { string IFirstService.GetData( int a, int b) { return String.Format( "{0}+{1}={2}" ,a,b,(a+b)); } } } |
6.下面我们在解决方案中重新建立一个【客户端控制台应用程序】的项目,名称叫做Host,这是web服务的主人[宿主],意思是该服务的启动或者关闭都归它来控制。
7.我们的解决方案成了上面的结构,也同样要添加[System.ServiceModel]的引用,还有对XfrogWCFService的引用,然后打开Program.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.ServiceModel; using XfrogWCFService; namespace Host { class Program { static void Main( string [] args) { //这段代码说创建一个新的服务宿主,这个服务是FirstService //也就是实现IFirstService接口的类 using (ServiceHost host = new ServiceHost( typeof (FirstService))) { host.Open(); Console.WriteLine( "服务已启动,按任意键中止..." ); Console.ReadKey( true ); host.Close(); } } } } |
8.接下来打开Host项目中的App.config文件,应该是会添加ServiceModel节点,如下面:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <? xml version="1.0" encoding="utf-8" ?> < configuration > < system.serviceModel > < services > < service name="XfrogWCFService.FirstService" behaviorConfiguration="behaviorConfiguration"> < host > < baseAddresses > < add baseAddress="http://192.168.10.58:8100/"/> </ baseAddresses > </ host > < endpoint address="http://192.168.10.58:8100/" binding="basicHttpBinding" contract="XfrogWCFService.IFirstService" name="BasicHttpBinding_IFirstService"></ endpoint > </ service > </ services > < behaviors > < serviceBehaviors > < behavior name="behaviorConfiguration"> < serviceMetadata httpGetEnabled="true"/> </ behavior > </ serviceBehaviors > </ behaviors > </ system.serviceModel > </ configuration > |
9.现在服务这边应该就是搭建好了,可以测试下,运行Host项目:如果是这样代表服务已经搭建成功了!
------------------------------------下面是客户端的哦-----------------------------------------
1.重新在别的地方建立一个解决方案,然后创建一个类库名称是Clinent1。
2.添加webService引用,步骤是:
2.1右击【引用】点击【添加服务引用】然后如下图:
地址是我们在wcf服务器端App.config页面写的地址将ip换成localhost
点击转到会查看到这个地址的服务
命名空间可以修改,这个是我们调用服务的命名空间,然后点击【确定】
3.给Clinent1添加ServiceModel引用。
4.在Clinent1中新建一个类Program.cs代码如下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Clinent1 { public class Program { /// <summary> /// WCF调用方法 /// </summary> /// <param name="par"></param> /// <returns></returns> public string getwcfstr( int a, int b) { ServiceReference1.FirstServiceClient aa = new ServiceReference1.FirstServiceClient(); return aa.GetData(a, b); //调用服务服务器接口的方法。 } } } |
5.在该解决方案中创建一个新的网站项目,添加ServiceModel和Clinent1的引用。
6.Clinent1的App.config如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <? xml version="1.0" encoding="utf-8" ?> < configuration > < system.serviceModel > < bindings > < basicHttpBinding > < binding name="BasicHttpBinding_IFirstService" /> </ basicHttpBinding > </ bindings > < client > < endpoint address="http://192.168.10.58:8100/" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IFirstService" contract="ServiceReference1.IFirstService" name="BasicHttpBinding_IFirstService" /> </ client > </ system.serviceModel > </ configuration > |
7.web.Config在configuration下添加,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | < system.serviceModel > < bindings > < basicHttpBinding > < binding name="BasicHttpBinding_IFirstService" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"> < readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> < security mode="None"> < transport clientCredentialType="None" proxyCredentialType="None" realm="" /> < message clientCredentialType="UserName" algorithmSuite="Default" /> </ security > </ binding > </ basicHttpBinding > </ bindings > < client > < endpoint address="http://192.168.10.58:8100/" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IFirstService" contract="ServiceReference1.IFirstService" name="BasicHttpBinding_IFirstService" /> </ client > </ system.serviceModel > |
8.添加一个aspx页面,前台写个div后台代码如下:
1 2 3 4 5 | protected void Page_Load( object sender, EventArgs e) { Program p= new Program();<br> //设置div的内容调用服务传递参数 div_wcf.InnerText = p.getwcfstr(10, 5); } |
9.客户端的结构是:
10.运行WebForm1.aspx的效果:为了测试,做的功能很简单啊。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构