using System;
using System.Collections.Generic;using System.Linq;using System.Runtime.Serialization;using System.ServiceModel;using System.ServiceModel.Channels;using System.Text;using System.Threading.Tasks;namespace ConsoleTest
{ class Program { static void Main(string[] args) { //发布服务端的主机服务 string url = "http://localhost:8080"; ServiceHost sh = new ServiceHost(typeof(MyService)); Binding bind = new BasicHttpBinding(); sh.AddServiceEndpoint(typeof(IService), bind, url); sh.Open();//客户端发送消息,使用服务端的服务
ChannelFactory<IService> cf = new ChannelFactory<IService>(bind); EndpointAddress ea = new EndpointAddress(url); IService iservice = cf.CreateChannel(ea); Student ss = iservice.GetStudent(); Console.WriteLine(ss.StuID); Console.WriteLine(ss.Name); Console.WriteLine(ss.Age); Console.Read(); } }/// <summary>
/// 定义服务的协定接口 /// </summary> [ServiceContract] public interface IService { [OperationContract] Student GetStudent(); }/// <summary>
/// 实现服务接口 /// </summary> public class MyService : IService { public Student GetStudent() { Student s = new Student(); s.StuID = 123456; s.Name = "哈哈哈哈"; s.Age = 20; return s; } }/// <summary>
/// 序列化 /// </summary> [DataContract] public class Student { private long stuID; [DataMember] public long StuID { get { return stuID; } set { stuID = value; } }private string name;
[DataMember] public string Name { get { return name; } set { name = value; } }private int age;
[DataMember] public int Age { get { return age; } set { age = value; } }/// <summary>
/// 反序列化时,执行此方法 /// </summary> /// <param name="ss"></param> [OnSerializing] public void hhha(StreamingContext ss) { this.Age = this.Age == 20 ? 50 : 88; }}
}