wcf基础笔记
嘻嘻哈,其实学习wcf纯属意外,因为当时是想看一下wpf,结果很不小心搜成了wcf(不知道当时心里怎么想的手给打错了),因为已经了去了解了wcf并且google了一些资料,心想既来之则安之,便整理了一些基本的笔记,写出来顺便就当理整理一下我的思路了。也可以给wcf想入门的同志们一点点参考。
wcf是做什么的,网上讲解很多,我就不多说了,我只想把我的第一个wcf代码程序展示出来,并且会附上详细注释。因为我的工作一直是做winform程序的,所以,该程序的服务器端和客户端均使用控制台应用程序进行开发。
wcf是具体的开发流程,msdn上解释是分为六部:
1,定义 Windows Communication Foundation 服务协定,说白了也就是我们通常所说的接口(intferface),只是比平时的接口多了几个属性。如下:
/// <summary>
/// 这些属性的命名空间为using System.ServiceModel
/// 该程序集一般情况下在C:\WINDOWS\Microsoft.NET\Framework\v3.0\Windows Communication Foundation文件中
/// </summary>
[ServiceContract] // 服务协定
public interface IHelloWordWCF
{
[OperationContract] // 数据协定,改属性表明,改服务会公开此方法,也就说客户端可以调用到
void Writer( string name);
[OperationContract]
string DoSome();
void S(); // 无协定,客户端将无法调用
}
怎么样,定义一个协议简单吧,那就进行第二步
2,实现 Windows Communication Foundation 服务协定,其实也就是定义一个继承自刚才我们定义的协定(IHellowWordWCF)的类
/// <summary>
/// 实现改协定
/// </summary>
public class HelloWordWCF:IHelloWordWCF
{
#region IHelloWordWCF 成员
public void Writer( string name)
{
Console.WriteLine(name);
Console.ReadLine();
}
public string DoSome()
{
return " yangyang " ;
}
public void S()
{
}
#endregion
}
这不,就实现了协定,在接口方法中可以写需要实现的功能,下一步就没这么常见了。
3,承载和运行基本的 Windows Communication Foundation 服务,也就是说,你刚才实现了协定的服务,那么,还得去承载运行发布呢。以方便客户端的调用。
// 定义一个基址。以方便客户端寻址。该URI指定HTTP方案、地计算机、端口号 8080
static Uri uri = new Uri( " http://localhost:8080/yangyang " );
static void Main( string [] args)
{
// 创建Service实例承载服务
// HelloWordWCF:承载服务的基本协定。
// uri:包含承载服务的基址
using (ServiceHost host = new ServiceHost( typeof (HelloWordWCF), uri))
{
try
{
// 加载该服务的终结点,
host.AddServiceEndpoint( typeof (IHelloWordWCF), new WSHttpBinding(), " HelloWordWCF " );
// 控制服务元数据和相关信息的发布。 发布服务了
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true ; // 元数据以使用 HTTP/GET 请求进行检索。
host.Description.Behaviors.Add(smb);
host.Open();
Console.Write( " The Service address is {0} " , uri);
Console.ReadLine();
host.Close();
}
catch (CommunicationException ex) // 表示服务或客户端应用程序中的通信错误。
{
throw ;
}
}
}
好了,至此,我们的超级超级简单的服务器端的编码算是完成了,编译成功后,调试-启动新实例。在浏览器中输入刚才定义的基址 http://localhost:8080/yangyang ,效果如下,
然后呢,我们打开vs的命令提示,输入“WcfTestClient”,然后回车,弹出如下窗体,输入我们的服务基址,就可以测试我们的服务是否可以正常工作了。如下图
如果测试通过,恭喜了,我们的服务器端已经建立起来了,现在,我们就需要实现我们的客户端了。也就是我们的第四步;
4,创建 Windows Communication Foundation 客户端
建了项目,我们首先引用using System.ServiceModel
我们需要命令行工具 ServiceModel 元数据实用工具 (Svcutil.exe) 帮我们生成服务器代码文件和配置文件,如下图所示
如图,首先执行红下滑线的命令,后面是我们服务的基址,然后回车,就会在蓝色下划线的目录生成这两个文件,我们需要在客户端添加现有文件,将这两个文件进行添加,generatedProxy.cs是服务文件的代码,使我们可以访问服务器的接口方法,app.config中,是生成服务器端的一些配置。接下来的第五步
5,配置基本 Windows Communication Foundation 客户端,第五步吧,其实是做一些总结点的配置,因为我这个演示是比较简单的,没有做繁杂的操作,所以,我就原本原样的使用svcutil.exe生成的配置,蓝色圈出的地方是服务代码中的终结点的名称,我们需要记录一下。
呵呵,这时候如果一切顺利,马上就要成功了,最后一步了
6,使用 Windows Communication Foundation 客户端
代码如下
static void Main( string [] args)
{
// 使用刚才记录终结点的名称,初始化一个服务协定的实体
HelloWordWCFClient client = new HelloWordWCFClient( " WSHttpBinding_IHelloWordWCF " );
Console.WriteLine(client.DoSome()); // 呵呵,我承认我的设计有点扯淡,协定中DoSome()中返回了“yangyang”这个字符串。
Console.ReadLine();
}
ok,一个简单的wcf程序就好了,现在,在文件夹中找出我们的服务端的程序,在bin-debug中编译好的Service.exe。然后,调试我们的客户端,结果如下图
这个时候我们的客户端已经成功调用了服务器端的方法。
我列出我的项目结构图:
所有的代码都在服务协定,接口都在programs里面写着。客户端蓝色圈出部分是svcutil.exe生成的。两个项目都需要添加syste.ServiceModel程序集。
哪里写的不对,还请读者体谅一下,wcf的新手拉。嘻嘻
分类: wcf
作者: Leo_wl
出处: http://HdhCmsTestcnblogs测试数据/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息