添加命名空间
编写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