怎么理解Wcf应用程序间通信

 原文地址:http://www.51gbk.com/a/websucai/WCF/2014/0801/501.html


使用了IIS做为宿主,客户端调用WCF服务的是Web应用程序。今天这个小节主要以介绍WCF中传输的配置为主,我们把上一节的内容稍做改动,以体现出"Endpoint""ABC"

  由于我在教程一里没有手写任何配置的代码,ClientService端的Web.config都是自动生成的,当我们添加服务引用时,IDE自动将客户端的配置文件中Endpoint与引用的服务的Endpoint匹配了。如下代码所示:

客户端Web.config

1 "1.0"encoding="utf-8"?>

2

3 

7

8 

9    

10         "true" targetFramework="4.0" />

11    

12

13    

14        

15            

16                 "BasicHttpBinding_IUser" closeTimeout="00:01:00"

17                     openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"

18                     allowCookies="false" bypassProxyOnLocal="false"hostNameComparisonMode="StrongWildcard"

19                     maxBufferSize="65536" maxBufferPoolSize="524288"maxReceivedMessageSize="65536"

20                     messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"

21                     useDefaultWebProxy="true">

22                     "32" maxStringContentLength="8192"maxArrayLength="16384"

23                         maxBytesPerRead="4096" maxNameTableCharCount="16384" />

24                     "None">

25                         "None"proxyCredentialType="None"

26                             realm="" />

27                         "UserName"algorithmSuite="Default" />

28                    

29                

30            

31        

32        

33             "http://localhost/User.svc" binding="basicHttpBinding"

34                 bindingConfiguration="BasicHttpBinding_IUser" contract="WCFService.IUser"

35                 name="BasicHttpBinding_IUser"/>

36        

37    

38 

服务端Web.config代码:

1 "1.0"encoding="utf-8"?>

2 

3

4  

5    "true"targetFramework="4.0" />

6  

7  

8    

9      

10        

11          

12           "true"/>

13          

14           "false"/>

15        

16      

17    

18     "true"/>

19  

20 

21     "true"/>

22  

23  

24 

  由上面的两个配置文件我们发现,客户端system.serviceMode节点有我们刚才讲的endpoint,而服务端为什么没有?这不是和我们刚才讲的有违背吗?好吧,我们承认IDE生成的Web.configendpoint很隐晦。那么我们看下面手工修改后[把对看起来很复杂并且对当前的学习无用的配置节删掉]的配置文件的代码(我将服务端和客户端放在一块了)

1 

2 "1.0"encoding="utf-8"?>

3 

4  

5    "true"targetFramework="4.0" />

6  

7  

8    

9      "WCFService">

10         "http://localhost/User.svc" binding="basicHttpBinding"

11            contract="WCFService.IUser"/>

12      

13    

14  

15 

16

17 

18 "1.0" encoding="utf-8"?>

19 

20  

21     "true" targetFramework="4.0" />

22  

23  

24    

25       "http://localhost/User.svc" binding="basicHttpBinding"

26          contract="WCFService.IUser"/>

27    

28  

29 

  修改配置文件后我们执行下,发现WCF服务依然执行成功!!这次的配置文件够明显了吧,不论是在服务端还是在客户端,endpoint中的ABC都是完全一样的。也就是终结点完全匹配!

  那么第一次的配置文件为什么能执行呢?答案是我们把WCF寄宿在IIS上,而IIS默认监听的就是Http协议[B确定了]并且地址也是相对于IIS上的文件地址[A确定了],合同更不用说了,找到User.svc什么都有了[C确定了],所以在服务端就没有必要显示的写出system.serviceModel,不信你试试,把服务端的配置文件中system.serviceModel节删除,程序一样可以运行!服务器端的endpoint确定了,客户端的endpoint自然要和服务端去对应,所以IDE在生成客户端的配置文件里endpoint写的很详细的,而服务端却没有endpoint


你可能感兴趣的:(怎么理解Wcf应用程序间通信)