WCF服务

一、WCF服务介绍:

1. WCF的全名称是:Windows Communication Foundation.开发代号Indigo.WCF是作为.Net Framework3.0的一个组件发布出来的,也就是说.Net Framework对其提供了原生的支持。从命名中不难看出微软对WCF所寄予的厚望:将WCF打造成为Windows平台下唯一的通信基础框架。通过合理利用上面这些分布式技术完全可以创建一个完美的,能够使用不同层次需求的分布式应用。但是,这些单一的技术和产品专注于某一特定的领域,并且具有完全不同的应用编程接口(API),这使得开发人员很难从容地从其中一种转移到另一种上去。基于这样.Net Remoting.的原因,急需一种全新的通信框架来整合以上这些技术,这就是WCF需要完成的使命。WCF是Windows平台下各种分布式技术的集大成者,它将上述的这些通信技术完全整合在一起,提供了一套统一的API。

2. wcf 与webservice服务优缺点介绍,wcf可以布置在IIS,控制台,winform,asp等等上都可以,但是web service服务只能布置在IIS上.

二、 WCF使用

1. 引用system. serviceModel

 

新建一个接口:必须加上特性标签,具体如下

namespace IBLL
{
    //接口上必须加该特性标签:服务契约,就是对外提供一个服务
    [ServiceContract]
   public interface IUserInfoService
    {
        //设置是操作契约
        [OperationContract]
        int Add(int a, int b);
    }
}

新建一个类,实现上面接口

namespace BLL
{
   public class UserInfoService:IUserInfoService
    {

        public int Add(int a, int b)
        {
            return a + b;
        }
    }
}

部署在控制台程序上。

新建一个控制台应用程序,修改配置文件如下

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
            <!--服务的名字                                       还有设置可以以get的形式请求服务-->
      <service name="BLL.UserInfoService" behaviorConfiguration="behaviorConfiguration">
        <host>
          <baseAddresses>
            <!--服务地址-->
            <add baseAddress="http://localhost:8000/"/>
          </baseAddresses>
        </host>                                                    <!--服务契约--> 
        <endpoint address="" binding="basicHttpBinding" contract="IBLL.IUserInfoService"></endpoint>
      </service>
      <!--如果有多个服务契约,添加配置,此处只有一个,所以注释掉就可以-->
      <!--<service name="BLL.UserInfoService" behaviorConfiguration="behaviorConfiguration">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8000/"/>
          </baseAddresses>
        </host>
        <endpoint address="" binding="basicHttpBinding" contract="IBLL.IUserInfoService"></endpoint>
      </service>-->
      
    </services> 
    <behaviors>
      <serviceBehaviors>
        <behavior name="behaviorConfiguration">
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

控制台端需要添加引用文件:system.serviceModel。

  

namespace Host
{
    class Program
    {
        static void Main(string[] args)
        {
                                                          //此处需要传递一个服务的名字
            using (ServiceHost host = new ServiceHost(typeof(BLL.UserInfoService)))
            {
                host.Open();
                Console.ReadKey();
            }
        }
    }
}

 客户端调用WCF服务的第一种方式:通过Visual Studio 命令提示(2013) 定位到客户端的位置,然后通过svcutil http://localhost:8000/?wsdl/o:FirstServiceClient.cs 来生成客户端代理类。

定位到客户端地址:如下路径,"C:\Users\wangj\Desktop\新建 Microsoft Office Word 文档 (3).docx"   

示例命令如下:cd C:\Users\wangj\Desktop\新建 Microsoft Office Word 文档 (3).docx

再输入命令:vcutil http://localhost:8000/?wsdl/o:FirstServiceClient.cs  ,其中的first需要换掉。

 运行之后就会生成两个文件:右击设置包括在项目当中,但是要注意该处因为定义了自己的接口,所以,需要把UserInfoServiceClient.cs文件中相关继承接口的内容注释掉。

 

然后就可以按照web service一样的调用方法。

namespace Client
{
    class Program
    {
        static void Main(string[] args)
        {
            UserInfoServiceClient client = new UserInfoServiceClient();
            int sum=client.Add(3, 6);
            Console.WriteLine(sum.ToString());
            Console.ReadKey();
        }
    }
}

三、但是以上方法不太方便快捷,最简单的方法还是和web service一样的使用方法。

 1. 右击添加服务引用

2. 

3. 使用

namespace Client2
{
    class Program
    {
        static void Main(string[] args)
        {
            
            ServiceReference1.UserInfoServiceClient client = new ServiceReference1.UserInfoServiceClient();
            int sum = client.Add(3, 6);
            Console.WriteLine(sum.ToString());
            Console.ReadKey();
        }
    }
}

 

posted @ 2019-04-23 11:03  锦大大的博客呀!  阅读(5400)  评论(0编辑  收藏  举报