无配置实现WCF的调用

在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 + ":你好";

        }

    }

}
View Code

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

    }

}
View Code

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();

            }

        }

    }

}
View Code

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

        }

    }

}
View Code

 

你可能感兴趣的:(WCF)