zoukankan      html  css  js  c++  java
  • 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:UserswangjDesktop新建 Microsoft Office Word 文档 (3).docx"   

    示例命令如下:cd C:UserswangjDesktop新建 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();
            }
        }
    }
  • 相关阅读:
    计算机三级数据库-指导
    spring导入约束
    hibernater获取session时org.hibernate.service.spi.ServiceException错误
    springxml配置注入报错
    右键复制类的完整路径
    关于实体里的toString方法
    idea创建web项目环境
    框架快速找类
    如何在scdn博客里搜索自己博客文章
    永久消除自动产生的QQPCMgr
  • 原文地址:https://www.cnblogs.com/wangjinya/p/10755173.html
Copyright © 2011-2022 走看看