WCF配置心得
根据蒋金楠老师的博文所说的, WCF的终结点有三个要素组成,分别是地址(Address)、绑定(Binding)和契约(Contract),简记可写成Endpoint = ABC。
地址:地址决定了服务的位置,解决了服务寻址的问题。
绑定:绑定实现了通信的所有细节,包括网络传输、消息编码,以及其他为实现某种功能对消息进行的相应处理。绑定的类型包括BasicHttpBinding、WsHttpBinding、NetTcpBinding等。
契约:契约是对服务操作的抽象,也是对消息交换模式以及消息结构的定义。
以上这些内容摘抄自蒋老师的博文。理解的这些对配置WCF很有帮助。
那下面就一步步来配置一个WCF。
首先是服务端,
一个WCF的核心是终结点,那么先把终结点写列出来,
<services>
<service name="BLL.Logic" behaviorConfiguration="te">
<host>
<baseAddresses>
<add baseAddress="http://localhost:9091/logicService"/>
</baseAddresses>
</host>
<endpoint address="" binding="ws2007HttpBinding" contract="BLL.ILogic" bindingConfiguration="transportWS2007HttpBinding" />
</service>
</services>
从<endpoint>几个属性address(地址) binding(绑定),Contract(契约),这几个属性正是上面所说的"ABC" 注意一下 binding里填的是BasicHttpBinding、WsHttpBinding、NetTcpBinding这些值,而确切使用哪一个binding呢,就需要在bindingConfiguration中设置,值是使用的<binding>的name值。contract项目中contract的契约接口的完全限定名,这里关于binding的配置接下来会介绍。address没填值,这里在<host>中已经给定了一个地址了。
介绍完<endpoint>,再看看<endpoint>外面的。<endpoint>包含在<services>的<service>下,这里的<serivces>是一个集合,里面可以包含多个服务,每个服务都会有特定的命名(name),而name则是项目里头实现契约(Contract)的服务(Service)的类的完全限定名。这里对servicebehavior进行了一些设置,具体的内容在名为te的<servicebehavior>中。
既然上面有配置有涉及到binding和behavior,下面则分别对两者进行配置。
<bindings>
<ws2007HttpBinding>
<binding name="transportWS2007HttpBinding" maxReceivedMessageSize="2147483647" maxBufferPoolSize="2147483647">
<readerQuotas maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxDepth="2147483647" maxNameTableCharCount="2147483647" maxStringContentLength="2147483647"/>
<security mode="Message">
<transport clientCredentialType="None"/>
</security>
</binding>
</ws2007HttpBinding>
<basicHttpBinding>
<binding name="newBinding" maxBufferPoolSize="21474835647" maxReceivedMessageSize="2147483647" messageEncoding="Text">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
</binding>
</basicHttpBinding>
</bindings>
bindings这部分和services一样,也是一个集合,里面包含着各种类型的binding,例如在<ws2007HttpBinding>里面的<binding>才是确切的某一个binding, <endpoint>使用时,bindingConfiguration的名称要写对外,binding的类型也不能错。<binding>里面的子节点和属性就不再一一介绍了,若是要通过WCF传输比较大的数据时,要在binding的属性和<readerQuotas>设置一下。
<behaviors>
<serviceBehaviors>
<behavior name="te">
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
最后到behaviors了。同理,behaviors也是一个集合,里面有两种类型,一种是serviceBehaviors,用于配置service的;另一种是endpointBehaviors,用于配置endpoint的。这两种类型都是一个集合,子节点<behavior>是它们的子项,以name来区分各个behavior,至于里面有什么属性和子项也不多说了,使用时在相应的service或endpoint的behaviorConfiguration属性填上behavior的name值就行了。
服务端的配置就唠叨到这里,下面到客户端的。
<client>
<endpoint address="http://localhost:9091/logicService" binding="ws2007HttpBinding"
bindingConfiguration="WS2007HttpBinding_ILogic" contract="Proxy.ILogic"
name="WS2007HttpBinding_ILogic">
</endpoint>
</client>
首先也是是终结点,客户端的终结点放在client里,里面也是有"ABC",这里的address一定要与服务端配置的一样,否则找不到相应的服务的。binding的类型也要与服务端的一样,contract则是用svcutil或其他工具生成的代码里的那个类的完全限定名。
<ws2007HttpBinding>
<binding name="WS2007HttpBinding_ILogic" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647"
messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="1024" maxArrayLength="2147483647"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
</binding>
</ws2007HttpBinding>
另一个还要提的是这个binding,客户端的binding比服务端的要配置多一点东西closeTimeout,openTimeout,receiveTimeout 大致与服务端一样。
另外若要传输比较的大数据时,可以按我这样来配,其实这个配置已经适用于传输几M的图片。由于是个入门者,很多东西的理解还不够透彻,以上有说错的还请各位批评指出。谢谢!
WCF配置心得的更多相关文章
- WCF学习心得----(四)服务承载
WCF学习心得----(四)服务承载 这一章节花费了好长的时间才整理个大概,主要原因是初次接触这个东西,在做练习实践的过程中,遇到了很多的问题,有些问题到目前还没有得以解决.所以在这一章节中,有一个承 ...
- WCF学习心得----(三)服务承载
WCF学习心得----(三)服务承载 这一章节花费了好长的时间才整理个大概,主要原因是初次接触这个东西,在做练习实践的过程中,遇到了很多的问题,有些问题到目前还没有得以解决.所以在这一章节中,有一个承 ...
- WCF学习第二篇:WCF 配置架构。这有助于对wcf配置的理解和记忆
使用 Windows Communication Foundation (WCF) 配置元素,您可以配置 WCF 服务和客户端应用程序. 可以使用配置编辑器工具 (SvcConfigEditor.ex ...
- WCF配置详解
前面一篇文章<WCF 学习总结1 -- 简单实例> 一股脑儿展示了几种WCF部署方式,其中配置文件(App.config/Web.config)都是IDE自动生成,省去了我们不少功夫.现在 ...
- WCF学习心得----(五)生成客户端
WCF学习心得----(五)生成客户端 1. 通过Svcutil.exe工具直接生成客户端 1.1 将服务承载于IIS上 1.1.1 在IIS中新建网站,所示效果如下图: 1.1.2 ...
- 编写WCF服务时右击配置文件无“Edit WCF Configuration”(编辑 WCF 配置)远程的解决办法
原文:编写WCF服务时右击配置文件无“Edit WCF Configuration”远程的解决办法 今天在看<WCF揭秘>书中看到作者提出可以在一个WCF Host应用程序的App.Con ...
- WCF 4.0 如何编程修改wcf配置,不使用web.config静态配置
How to programmatically modify WCF without web.config setting WCF 4.0 如何编程修改wcf配置,不使用web.config静态配置 ...
- Tesseract 3.04 + VS2013 配置心得(包括静态库版本号和Release版本号)
研究Tesseract也有几个星期了 走了一些弯路 网上有非常多VS2010的配置心得 但没有VS2013的, 找到一篇之后, 又发现会有一些小问题, 这里记录下来, 也为新人提供一些帮助. Tess ...
- WCF学习心得------(三)配置服务
配置服务 配置服务概述 在设计和实现服务协定后,便可以进行服务的配置.在其中可以定义和自定义如何向客户段公开服务,包括指定可以找到服务的地址,服务用于发送和接受消息的传输和消息编码,以及服务需要的安全 ...
随机推荐
- linux内核情景分析之匿名管道
管道的机制由pipe()创建,由pipe()所建立的管道两端都在同一进程.所以必须在fork的配合下,才可以在具有亲缘关系的进程通信 /* * sys_pipe() is the normal C c ...
- jquery 中的post和get方法同步问题
解决方法: 在需要同步的js代码前修改ajax的async属性. 有两种设置方法: 1: $.ajaxSettings.async = false; 2: $.ajaxSetup({ async : ...
- 使用Powerdesigner生成设计的数据表(一张或多张)的测试数据
设计表完成以后,我们需要生成一些测试数据,可以直接更新到数据库中,下面我们就来试试: 第一步:建立需要的Profiles测试文件,[Model]--[Test Data Profiles],如图所示: ...
- BZOJ 4543 2016北京集训测试赛(二)Problem B: thr 既 长链剖分学习笔记
Solution 这题的解法很妙啊... 考虑这三个点可能的形态: 令它们的重心为距离到这三个点都相同的节点, 则其中两个点分别在重心的两棵子树中, 且到重心的距离相等; 第三个点可能在重心的一棵不同 ...
- Ubuntu 16.04安装深度的Wine(deepin-wine 1.9.0)
说明: 1.使用的Wine版本是深度出品(Deepin),已经精简了很多没用的配置,使启动能非常快,占用资源小. 2.提取自QQ和迅雷安装包,如果安装了这个Wine不成功,可能是依赖问题,再试多几次, ...
- 苹果开发者:Siri未开放API 有些让人失望
北京时间6月12日消息,据国外媒体报道,苹果公司在WWDC大会上展示了新版iOS和OS X系统,但由于未开放Siri API,一些苹果开发者还是有些失望. Siri API可以让开发者在自己的应用中整 ...
- Linux下不重启永久修改hostname
LINUX下不重启永久修改hostname 1.如果只是修改hostname可以通过如下命令 hostname newHostname 注意:这种修改方式只有当前有效,等服务器重启后hostnam ...
- SSO单点登录系列1:cas客户端源码分析cas-client-java-2.1.1.jar
落雨 cas 单点登录 希望能给以后来研究cas的兄弟留下一点思路,也算是研究了两天的成果,外国人的代码写的很晦涩,翻译下来也没有时间继续跟进,所以有错误的还请大家跟帖和我讨论,qq 39426378 ...
- 《linux 内核全然剖析》 mktime.c
tm结构体的定义在time.h里面 struct tm { int tm_sec; int tm_min; int tm_hour; int tm_mday; int tm_mon; int tm_y ...
- 微信小程序 - 非Form数据怎么发送到后端?
通过设置异步缓存,就可以做到 wx.setStorageSync('imgs',imglist); 最后的提交信息: