添加命名空间
编写WCF服务,首先需要添加必要引用
using System.ServiceModel; //服务契约 using System.Runtime.Serialization; //数据契约
对于自宿主的WCF服务,只需要如下步骤:
- 创建一个控制台项目
- 编写服务接口及实现
- 对服务进行相关的通信配置
- 手动启动服务
通过以上步骤 服务就可以正常调用了。
接下来举个例子:
创建一个控制台项目,添加WCF服务SayHi
在项目中多了个两个类文件,一个ISayHi接口类,一个SayHi实现类。
在接口类中添加方法
[ServiceContract] public interface ISayHi { [OperationContract] string ToSayHi(); /// <summary> /// 自我介绍 /// </summary> /// <param name="person">个人信息</param> /// <returns>返回个人介绍</returns> [OperationContract] string Introduce(Person person); }
在实现类中,实现接口方法
public class SayHi : ISayHi { public string ToSayHi() { return "Hi~~"; } /// <summary> /// 自我介绍 /// </summary> /// <param name="person">个人信息</param> /// <returns>返回个人介绍</returns> public string Introduce(Person person) { return person.Introduce(); } }
其中Person类的定义如下;
[DataContract] public class Person { [DataMember] public string Name { get; set; } [DataMember] public int Age { get; set; } [DataMember] public string Country { get; set; } public string Introduce() { return string.Format("Hello,my name is {0}.I am {1} years old.I am from {2}.", Name, Age, Country); } }
注意DataMember属性,可以控制字段的可见性。默认是都可见,如果DataMember属性在类中出现,则没有添加该属性的字段不可见。
服务编写完成 ,然后就对服务进行通信配置
由于服务的自宿主,服务配置就在当前项目的App.config文件中进行配置
服务端的配置一般包含三部分,服务的endpoint配置,binding方式配置,以及behavior行为配置
对于自宿主的服务,服务的地址是有服务配置确定的,所以会在服务节点,有一个host节点,配置服务访问的地址。
配置文件具体配置内容如下:
<system.serviceModel> <services> <service name="WCFConsoleHost.SayHi" behaviorConfiguration="HttpGetEnable"> <endpoint address="" bindingConfiguration="NoSecurity" binding="basicHttpBinding" contract="WCFConsoleHost.ISayHi" /> <!--自宿主服务 多一个host节点--> <host> <baseAddresses> <add baseAddress='http://localhost:8082/SayHi'/> </baseAddresses> </host> </service> </services> <bindings> <basicHttpBinding> <binding name="NoSecurity" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"> <readerQuotas maxArrayLength="2147483647" maxStringContentLength="2147483647"/> <security mode="None" /> </binding> </basicHttpBinding> </bindings> <behaviors> <serviceBehaviors> <behavior name="HttpGetEnable"> <serviceDebug includeExceptionDetailInFaults="true"/> <serviceMetadata httpGetEnabled="true"/> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel>
服务配置完成,编写服务启动代码
在主程序中,通过实例化一个ServiceHost,然后调用其open方法,启动服务
服务启动代码如下:
static void Main(string[] args) { var service = new ServiceHost(typeof(SayHi)); try { service.Opened += delegate { Console.Write("wcf is start"); }; service.Open(); } catch (Exception) { service.Abort(); throw; } Console.ReadKey(); }
启动项目,当看到控制台输出“wcf is start”,说明服务已经启动
打开服务测试客户端
添加服务,服务地址输入配置文件中host节点中配置的服务地址。
可以看到服务正常连接,并且成功返回预期的结果。
以上就是自宿主服务的编写、配置、启动以及调用测试。
当然调用方式还有很多种。只需要在客户端配置与服务端一直的通信,创建客户端执行方法调用即可。
后续其他宿主方式中会讲解到 。
WCF测试客户端的使用可查看文章:WCF_实用小工具
http://blog.csdn.net/shiyaru1314/article/details/75537554