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;
}
}
}