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) 客户端使用代理类调用服务操作。

 

原文地址:https://www.cnblogs.com/mc67/p/5082982.html