WCF消息模式基本内容简述
创始人
2024-06-23 17:21:04
0

WCF使用方式比较灵活,在程序员眼中,它占据着非常重要的地位。我们在这篇文章中将会为大家详细讲解一下有关WCF消息模式的相关应用方式,以方便大家在实际应用中能够获得一些帮助。

最简单就是WCF消息模式就是方法参数,所有的基本类型可以直接被序列化。我们还可以使用 MessageParameterAttribute 为参数定义消息名称。

  1. [ServiceContract]  
  2. public interface IContract  
  3. {  
  4. [OperationContract]  
  5. double Add(double a, double b);  
  6. [OperationContract]  
  7. void Test([MessageParameter(Name="myString")]string s);  

对于WCF消息模式中的自定义类型,我们可以使用 DataContractAttribute 或 MessageContractAttribute 来定义,这些在前面的章节已经提过,此处不再做进一步说明。

WCF 服务方法支持 ref / out 关键字,也就是说底层引擎会重新为添加了关键字的对象赋予返回值。我们使用 "Message Logging" 和 "Service Trace Viewer" 查看一下 Reply Message。

Server.cs

  1. [ServiceContract]  
  2. public interface IContract  
  3. {  
  4. [OperationContract]  
  5. double Add(double a, ref double b);  
  6. }  
  7. public class MyService : IContract  
  8. {  
  9. public double Add(double a, ref double b)  
  10. {  
  11. b += 2;  
  12. return a + b;  
  13. }  

client.cs

  1. using (ContractClient client = new ContractClient
    (new BasicHttpBinding(),   
  2. new EndpointAddress("http://localhost:8080/myservice")))  
  3. {  
  4. double b = 2;  
  5. double c = client.Add(1, ref b);  
  6. Console.WriteLine("c={0};b={1}", c, b);  

Reply Message

  1. < MessageLogTraceRecord> 
  2. < s:Envelope xmlns:s="http://..."> 
  3. < s:Header> 
  4. < Action s:mustUnderstand="1" xmlns="http://...">
    http://tempuri.org/IContract/AddResponse< /Action> 
  5. < /s:Header> 
  6. < s:Body> 
  7. < AddResponse xmlns="http://tempuri.org/"> 
  8. < AddResult>5< /AddResult> 
  9. < b>4< /b> 
  10. < /AddResponse> 
  11. < /s:Body> 
  12. < /s:Envelope> 
  13. < /MessageLogTraceRecord> 

在 Reply Message 中除了返回值 "AddResult" 外,还有 "b"。:-)

在进行WCF消息模式的处理时,需要注意的是,即便我们使用引用类型的参数,由于 WCF 采取序列化传送,因此它是一种 "值传递",而不是我们习惯的 "引用传递"。看看下面的例子,注意方法参数和数据结果的不同。

Server.cs

  1. [DataContract]  
  2. public class Data  
  3. {  
  4. [DataMember]  
  5. public int I;  
  6. }  
  7. [ServiceContract]  
  8. public interface IContract  
  9. {  
  10. [OperationContract]  
  11. void Add(Data d);  
  12. [OperationContract]  
  13. void Add2(ref Data d);  
  14. }  
  15. public class MyService : IContract  
  16. {  
  17. public void Add(Data d)  
  18. {  
  19. d.I += 10;  
  20. }  
  21. public void Add2(ref Data d)  
  22. {  
  23. d.I += 10;  
  24. }  

Client.cs

  1. using (ContractClient client = 
    new ContractClient(new BasicHttpBinding(),   
  2. new EndpointAddress("http://localhost:8080/myservice")))  
  3. {  
  4. Data d = new Data();  
  5. d.I = 1;  
  6. client.Add(d);  
  7. Console.WriteLine("d.I={0}", d.I);  
  8.  
  9. Data d2 = new Data();  
  10. d2.I = 1;  
  11. client.Add2(ref d2);  
  12. Console.WriteLine("d2.I={0}", d2.I);  

输出:

d.I=1

d2.I=11

以上就是对WCF消息模式的相关介绍。

【编辑推荐】

  1. WCF调用服务异常基本解决方案介绍
  2. WCF体系结构基本概念分享
  3. 各种常用WCF术语内容总结
  4. WCF特点具体优势总结
  5. WCF安全参数相关设置方法详解

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
30分钟搞定iOS自定义相机 最近公司的项目中用到了相机,由于不用系统的相机,UI给的相机切图,必须自定义才可以。就花时间简单研究...
Intel将Moblin社区控... 本周二,非营利机构Linux基金会宣布,他们将担负起Moblin社区的管理工作,而这之前,Mobli...