在vs中创建空的解决方案
1.先创建一个类库,用来定义服务契约
添加引用:“System.ServiceModel”
HelloService:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.ServiceModel; namespace HelloService { public class HelloService:IHelloService { /// <summary> /// 打招呼 /// </summary> /// <param name="name"></param> /// <returns></returns> public string SayHello(string name) { return name + ":你好"; } } }
IHelloService:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.ServiceModel; namespace HelloService { /// <summary> /// 服务契约 /// </summary> [ServiceContract] public interface IHelloService { /// <summary> /// 服务操作 /// </summary> /// <param name="name"></param> /// <returns></returns> [OperationContract] string SayHello(string name); } }
2.创建一个控制台应用程序
添加引用:“System.ServiceModel”
添加项目引用, 引用项目”HelloService“
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.ServiceModel; using System.ServiceModel.Channels; namespace HelloServiceHost { class Program { static void Main(string[] args) { using (MyHelloHost Host = new MyHelloHost()) { Host.open(); Console.Read(); } } } public class MyHelloHost:IDisposable { /// <summary> /// 定义一个服务对象 /// </summary> private ServiceHost _myhost; /// <summary> /// 定义一个基地址 /// </summary> public const string BaseAddress = "net.pipe://localhost"; /// <summary> /// 可选地址 /// </summary> public const string HelloServiceAddress = "Hello"; // 服务契约实现类型 public static readonly Type ServiceType= typeof(HelloService.HelloService); //服务契约接口 public static readonly Type ContractType = typeof(HelloService.IHelloService); /// <summary> ///服务定义一个绑定 /// </summary> public static readonly Binding hellobinding = new NetNamedPipeBinding(); /// <summary> /// 构造服务对象 /// </summary> protected void CreateHelloServiceHost() { //创建服务对象 _myhost = new ServiceHost(ServiceType, new Uri[] { new Uri(BaseAddress) }); //添加终结点 _myhost.AddServiceEndpoint(ContractType, hellobinding, HelloServiceAddress); } public ServiceHost Myhost { get { return _myhost; } } /// <summary> /// 打开服务方法 /// </summary> public void open() { Console.WriteLine("开始启动服务……"); _myhost.Open(); Console.WriteLine("服务已经启动……"); } //构造方法 public MyHelloHost() { CreateHelloServiceHost(); } //销毁服务宿主对象实例 public void Dispose() { if (_myhost!=null) { (_myhost as IDisposable).Dispose(); } } } }
3.创建一个控制台应用程序
添加引用:“System.ServiceModel”
添加项目引用, 引用项目”HelloService“
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.ServiceModel; using System.ServiceModel.Channels; using HelloService; namespace HelloClient1 { class Program { static void Main(string[] args) { using (HelloProxy proxy = new HelloProxy()) { //利用代理调用服务 Console.WriteLine(proxy.Say("张三")); Console.Read(); } } } //硬编码定义服务契约 interface IService { //服务操作 [OperationContract] String Say(String name); } class HelloProxy : ClientBase<IHelloService>, IService { //硬编码定义绑定 public static readonly Binding HelloBinding = new NetNamedPipeBinding(); //硬编码定义地址 public static readonly EndpointAddress HelloAddress = new EndpointAddress(new Uri("net.pipe://localhost/Hello")); //构造方法 public HelloProxy():base(HelloBinding,HelloAddress) { } public String Say(String name) { //使用channel属性对服务进行调用 return Channel.SayHello(name); } } }
时间: 2024-10-13 04:19:50