WCF学习笔记之自托管
WCF学习笔记之控制台中程序实现简单调用
由于是学习笔记,这里我不做过多的讲解
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.ServiceModel; using System.ServiceModel.Description; //服务端把自己的服务协定元数据交给客户端。 namespace WCF_Fuck { //服务协定 [ServiceContract] public interface IHelloWCFService { [OperationContract] string HelloWCF(string name); } //实现服务协定 public class HelloWCFService : IHelloWCFService { public string HelloWCF(string name) { return "Hello,"+ name; } } class Program { static void Main(string[] args) { //创建一个基地址 MyService是服务地址,这个名字可以随便起,和服务实现类的名字相同也可以,他们没有联系 Uri baseAddress = new Uri("http://localhost:8000/MyService"); //创建一个ServiceHost,由于我们只有一个服务(HelloWCFService类),所有我们只创建一个ServiceHost ServiceHost host = new ServiceHost(typeof(HelloWCFService),baseAddress); //ServiceHost有两个参数,第一个是具体的服务实现类,第二个是基地址; //第一个参数指定了服务协定(接口),一个服务实现类可能实现多个服务协定接口, //这样每个服务协定接口都有一个终结点与之对应了。 //第二个参数定义了绑定,即客户端与服务端沟通的方式,这里指定了一个wsHttpBinding的实例, //第三个参数是终结点的地址。 //这里给了一个相对地址,终结点的最终地址将会把这个相对地址与基地址组合,即:http://localhost:8000/MyService/HelloWCFService host.AddServiceEndpoint(typeof(IHelloWCFService), new WSHttpBinding(), "HelloWCFService"); //创建一个元数据行为对象 ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); smb.HttpGetEnabled = true; //smb.HttpsGetEnabled = true; 注意这两个的区别滴呀; //客户端就可以使用http 中的get方法从服务端下载数据了; host.Description.Behaviors.Add(smb); host.Open(); Console.WriteLine("service is ready.."); Console.WriteLine("press any key to terminated..."); Console.ReadLine(); host.Close(); } } }
smb.HttpGetEnabled = true;
smb.HttpsGetEnabled = true;
注意这两个的区别滴呀;
总结
通过这个例子,我们以最简单的方式实现了一个WCF 程序,我们应该了解一个WCF 程序最基本的编程步骤。
(1) 定义服务协定接口和接口中的操作协定。
(2) 用一个服务类实现服务协定接口和接口中的操作协定。
(3) 建立一个宿主程序用来寄存服务。
[针对控制台程序宿主]
(4) 为服务建立ServiceHost 对象并指定要寄存的服务类和服务基地址。
(5) 为ServiceHost 添加终结点,指定其服务协定、绑定类型和终结点地址(或相对地址)。
(6) 为ServiceHost 添加服务元数据行为对象,要将该对象的HttpGetEnabled属性设为true 以启动元数据交换。
(7) 启动ServiceHost。
(8) 建立客户端。
(9) 为客户端添加指向服务基地址的服务引用以下载元数据。
(10) 客户端使用代理类调用服务操作。