今天学了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/
本文版权归作者和博客园共有,禁止转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
依旧牛逼依旧狂依旧是个小流氓