wcf 学习1:搭建服务

一:创建一个解决方案

1:分别添加:控制台应用程序:Hosting(宿主)、控制台应用程序:Client(客户端)、类库:Service (服务)、类库:Contract(契约)

2:添加契约:

右击contract项目,添加接口 ICalcultor

 
[ServiceContract(Name = "CalcultorService", Namespace = "http://www.artech.com")] 注意:http://www.artech.com 不能写成 http://www.artech.com/ public interface ICalculator { [OperationContract] double Add(double x, double y); [OperationContract] double Subtract(double x, double y); [OperationContract] double Multiply(double x, double y); [OperationContract] double Divide(double x, double y); }

  3:添加服务

右击Service项目,添加类:Calcutor

public class CalcultorService : ICalculator
    {
        public double Add(double x, double y)
        {
            return x + y;
        }

        public double Subtract(double x, double y)
        {
            return x - y;
        }

        public double Multiply(double x, double y)
        {
            return x * y;
        }

        public double Divide(double x, double y)
        {
            return x / y;
        }
    }

  

4:配置Hosting(宿主)

编程方式配置:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using System.ServiceModel.Description;
using WCFContract;
using WCFService;
namespace Host3_26
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServiceHost host = new ServiceHost(typeof(CalcultorService)))
            {
                host.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(), "http://127.0.0.1:9999/CalcultorService");
                if (host.Description.Behaviors.Find<ServiceMetadataBehavior>() == null)
                {
                    ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
                    behavior.HttpGetEnabled = true;
                    behavior.HttpGetUrl = new Uri("http://127.0.0.1:9999/CalcultorService/metadata");
                    host.Description.Behaviors.Add(behavior);
                }
                host.Opened += delegate
                {
                    Console.WriteLine("CalcultorService已经启动,按任意键终止服务!!");
                };
                host.Open();
                Console.Read();
            }
        }
    }
}

  管理方式配置宿主:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="metadataBehavior">
          <serviceMetadata httpGetEnabled="true"  httpGetUrl="http://127.0.0.1:9999/CalcultorService/metadata"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service name="WCFService.CalcultorService" behaviorConfiguration="metadataBehavior">
        <endpoint address="http://127.0.0.1:9999/CalcultorService"
                  binding="wsHttpBinding"
                  contract="WCFContract.ICalculator"/>
      </service>
    </services>
  </system.serviceModel>
</configuration>

  5:发布宿主

6:客户端添加服务

在宿主已经运行的情况下,右击客户端添加服务,路径:

http://127.0.0.1:9999/CalcultorService/metadata

cs代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Client3_26.ServiceReference1;

namespace Client3_26
{
    class Program
    {
        static void Main(string[] args)
        {
            using (CalcultorServiceClient pro = new CalcultorServiceClient())
            {
                Console.WriteLine(pro.Add(1, 1));
                Console.Read();
            }
        }
    }
}

 

//客户端调用服务方法2:
1:引用契约 using WCFContract;
2:修改配置文件:
       <endpoint address="http://127.0.0.1:9999/CalcultorService" 
         binding="wsHttpBinding"
          contract="WCFContract.ICalculator"
          name="defaultEndpoint"></endpoint> 3:开始调用 using (ChannelFactory<WCFContract.ICalculator> channe = new ChannelFactory<WCFContract.ICalculator>("defaultEndpoint")) {           WCFContract.ICalculator ca = channe.CreateChannel();           Console.WriteLine(ca.Add(1, 2)); };

 

posted on 2013-03-26 22:42  朝着  阅读(242)  评论(1编辑  收藏  举报