• 今天学了WCF记录一下


    学了一下WCF,总结起来就是,网上的教程残缺不全,要不很全,但是完全看不懂,要不就是看得懂,但是完全不知道怎么下笔。
    学了一天,累的要死,通过7到10个左右的案例和文图教程。我算搞个大概明白怎么回事了。这个破玩意弄明白就没啥意思了。文思如屁崩。
     
    先说下WCF是什么鸟东西,这个玩意就是WEB SERVICE的升级版,如果连WEB SERVICE是啥都不知道的话,自己去谷歌资料学,很简单,学会了你会发现我上午分享的那些很好玩。。
     
    当然WS是有一定缺点,例如。。。我百度下。优点: 不需要额外的客户端支持 / 无视防火墙 / 平台无关 缺点: 慢
    百度给的答案,但是慢这个事情是真的,而且如果数据量过大,可能产生丢包。
     
    当然WCF也是有缺点的,例如。。。。谷歌下。

    ◆易用性:只需几行代码即可使服务运行。
        ◆灵活性:通过 ServiceHost<T> 的 Open() 和 Close() 方法,可以轻松控制服务的生存期。
        ◆易调试性:可以使用熟悉的调试方式对自承载环境中承载的 WCF 服务进行调试,而不必连接到单个应用程序来激活服务。
        ◆易部署性:通常,部署简单 Windows 应用程序与使用 xcopy 一样容易。您不必在服务器场和类似地方部署复杂的方案,即可部署简单的 Windows 应用程序来充当 WCF ServiceHost。
        ◆支持所有绑定和传输:自承载并不限制您仅能使用现有的绑定和传输技术。在 Windows XP 和 Windows Server 2003 上,IIS 限制您只能使用 HTTP。

        下面WCF自承载的缺点:
        ◆可用性受到限制:服务只有在应用程序运行时才能被访问。
        ◆功能受到限制:自承载的应用程序在对高可用性、易管理性、可靠性、可恢复性、版本控制和部署方案的支持方面受到一定限制。至少,现有的 WCF 无法提供这些支持,因此在自承载的情况中,您必须自己实现这些功能;例如,默认情况下 IIS 提供了这些功能中几项。

    缺点可以拟补。。一会在说怎么拟补

    为了简单的说明,就不截图了,总的来说需要建立一个WCF的项目,根据网上不同的攻略,最后发现对的项目是WCF服务库。这个东西想不说怎么写,根据他的介绍他有个 ABC这个鸟东西,ABC又是咩类根据资料显示他是三个单词地址(Address)绑定(Binding)契约(Contract),

    地址决定访问服务器的位置

    绑定实现通信细节

    契约是对服务对象进行抽象

    很专业了有木有!!!看着很厉害有木有!!!

    下面进行一个白话翻译。

    地址 就是配置文件(你看你新建的WCF服务库是不是有个配置文件)

    契约 我个人理解应该是属于接口的一个概念,因为在默认的IService1他就是个接口的写法,虽然加了一些特性。

    绑定 有接口必然有实现。。不多解释

    好了 你把这三个理解了。是不是觉得WCF很坑人。

    当然白话的解释留在心中作为疑问就可以了。但是他们的写法跟我说的很相像。

    也不多做解释。F5运行吧。是不是出来一个对话框!!!有木有!!!给两个例子!!

    其实这两个例子就是实现传参和返回。

    好了,你现在有一个WCF的DLL了。

    WCF怎么调用呢。

    WCF分两种宿主模式一个是在别的程序上宿主一个是在自己程序上宿主。在别的程序上的我看网上的一般都是和IIS合体。但是由于电脑木有IIS就木发宿了。所以自己。。自己写一个宿主。叫他来睡,否则WCF无法启动啊!!亲!!无法启动!!反正我没宿主的时候没让他启动起来。。。

    没办法,写一个控制台程序让他启动吧。

    这时候其实就是需要A的时候了 A是什么?自己去上文找

    但是这个配置文件怎么写呢。我纠结在配置文件这里将近2个小时,后来发现原来是我弄错项目了。

    最简单的办法就是把你在WCF源码下面的配置文件的

    <system.serviceModel>
        <services>
          <service name="WcfServiceLibrary1.Service1">
            <host>
              <baseAddresses>
                <add baseAddress = "http://localhost:8732/Design_Time_Addresses/WcfServiceLibrary1/Service1/" />
              </baseAddresses>
            </host>
            <!-- Service Endpoints -->
            <!-- 除非完全限定,否则地址将与上面提供的基址相关 -->
            <endpoint address ="" binding="wsHttpBinding" contract="WcfServiceLibrary1.IService1">
              <!--
                  部署时,应删除或替换下列标识元素,以反映
                 用来运行所部署服务的标识。删除之后,WCF 将
                  自动推断相应标识。
              -->
              <identity>
                <dns value="localhost"/>
              </identity>
            </endpoint>
            <!-- Metadata Endpoints -->
            <!-- 元数据交换终结点供相应的服务用于向客户端做自我介绍。 -->
            <!-- 此终结点不使用安全绑定,应在部署前确保其安全或将其删除-->
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior>
              <!-- 为避免泄漏元数据信息,
              请在部署前将以下值设置为 false 并删除上面的元数据终结点  -->
              <serviceMetadata httpGetEnabled="True"/>
              <!-- 要接收故障异常详细信息以进行调试,
              请将以下值设置为 true。在部署前设置为 false
                以避免泄漏异常信息-->
              <serviceDebug includeExceptionDetailInFaults="False" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>

    复制到你的项目里面

      <add baseAddress = "http://localhost:8732/Design_Time_Addresses/WcfServiceLibrary1/Service1/" />
    这句话的baseaddress就是A地址,访问地址 你现在点你自己项目这个地址果断点不开。因为你WCF服务没有启动,F5运行你在点这个地址就能进去。但是这个不是我要的结果。

    略作修改,这个地址是虚拟路径自己改着玩

    在WCF的bin里面你会发现他生成的dll,这个DLL就是WCF的服务库。附加到你的项目或者是控制台里面,我用控制台弄的,然后有的IDE需要引用一下system.servicemodel

                using(var ser=new ServiceHost(typeof(Service1)))
                {
                    ser.Open();
                    Console.WriteLine("开启");
                    Console.ReadLine();
                }

    这样就开启了,注意事项就是Service1不是接口的,而是绑定如果配置文件没复制粘贴错误的话。地址也改好的话,那么运行

    OK这个时候去访问你的地址吧。打开页面了吧。这样WCF就被放在了控制台上了。只要控制台让WCF启动的话,那么你写的程序就一切正常。

    这个就是我理解的宿主在别的程序上面。

    以上资料来至 http://www.cnblogs.com/artech/archive/2007/02/26/656901.html 和http://blog.sina.com.cn/s/blog_661beca00100xzei.html

    博客园的是专业的写法。没看明白只是把基础的一些信息看明白了,新浪博客的案例我按照操作居然失败了。。

    所以又找了一些别的信息补充进来。

    至于项目引用嘛 我说了 WS引用的方式是一种,但是不知道这样做会不会影响WCF的优势,这个需要找资料瞅瞅

    其实WS也是不访问不触发,需要写一个windows服务,这个服务,我也写了小半天,下回有机会在分享。

    他的缺点之一就是受限制,不访问不触发,但是貌似WS不访问也不触发吧。所以用windows服务可以解决这个问题一奶同胞谁都别冷落谁。反正我是这么想的不知道,高人如何想的呢。呵呵。

    第二个缺点暂时还不知道如何去解决。

    这个方法100%可以让你的程序使用WCF服务库 哈哈。

    绑定和契约这个不用多说吧。这个要不会的话,我也没办法了。WCF返回值貌似没有规定,WS返回值是JSON或者是XML格式所以有一些东西不方便传递,要是传递文件的话要先二进制,到那边在变回来。。WCF传东西我还没看。不知道是什么鸟样。


    作者:小胖李
    出处:http://www.cnblogs.com/minCS/
    本文版权归作者和博客园共有,禁止转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

     

  • 相关阅读:
    04前端基础平台搭建宣导材料
    「收藏」全国12.5m 地形DEM&0.3米分辨率谷歌卫星地图免费下载
    【产业经济电子沙盘】辖区产业发展和规划如何汇报才能出彩?
    数字高程模型 | DEM采集的主要方式
    漫画 快捷键 下一话 多css路进匹配
    Python 轻量级 Web 应用框架 Flask Demo搭建 Better
    手写代码,实现Vue2响应式 Better
    Canvas 折线图组件封装 Better
    Vue 父子组件生命周期顺序梳理 Better
    Vue Router 导航守卫总结 Better
  • 原文地址:https://www.cnblogs.com/minCS/p/2649865.html
Copyright © 2020-2023  润新知