C#之WCF入门1简单的wcf例子
第一步:创建一个空的解决方案,新建一个WCF服务应用程序项目(使用默认名字) 来模拟服务端,新建一个控制台应用程序项目(名称改为 ConsoleApp)来模拟客户端。
第二步:简单分析WcfService_1项目,该项目内容如下:
一句话总结:这个项目模拟服务器端,Service1.svc文件封装的就是提供给客户端的服务引用,Service1.svc.cs文件里是服务引用的具体实现。但这里因为Service1.svc.cs文件里的主要内容——Service1类是继承于 IService1.cs文件里的 IService1接口,所以重头戏分了一半给IService1.cs文件。
首先看IService1.cs文件,从名字上可以看得出这个是接口文件,里面定义了了一些接口,接口声明了一些方法。我在里面添加两个类 public class Student1 、 public class Student2 和一个方法 Student1 StudentWriteName(string name)用作测试。代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.ServiceModel.Web; using System.Text; namespace WcfService_1 { // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IService1”。 [ServiceContract] public interface IService1 { [OperationContract] string GetData(int value); [OperationContract] CompositeType GetDataUsingDataContract(CompositeType composite); // TODO: 在此添加您的服务操作 //新增方法 [OperationContract] Student1 StudentWriteName(string name); } // 使用下面示例中说明的数据约定将复合类型添加到服务操作。 [DataContract] public class CompositeType { bool boolValue = true; string stringValue = "Hello "; [DataMember] public bool BoolValue { get { return boolValue; } set { boolValue = value; } } [DataMember] public string StringValue { get { return stringValue; } set { stringValue = value; } } } #region 新增stu类 [DataContract] public class Student1 { string name; [DataMember] public string Name { get { return name; } set { name = value; } } } public class Student2 { string name = "张三"; public string Name { get { return name; } set { name = value; } } } #endregion }
上面这段代码要注意以下几方面:
2-1、服务契约
接口IService1前面加了 [ServiceContract] ,意思是把这个接口(包括继承这个接口的类)声明为服务契约,服务契约是对客户端而言的,就是这个接口 暴露 在客户端面前,就是让客户端可得见这个接口。但看得见接口不表达可以看得见接口里声明的方法,这是两回事(原因很简单,就算接口是可见的,但里面的方法也有一些是可见另一些不可见的嘛),如果想把方法也声明为对客户端可见的,得在声明方法的签名加 [OperationContract],这也叫服务契约。总结:服务契约有两种,[ServiceContract]是声明接口、类对客户端可见的,[OperationContract]是具体声明类里的那些方法对客户端可见。
2-2、数据契约
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/70792.html