WCF消息模式基本内容简述

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);
  8. }

对于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. }
  14. }

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);
  7. }

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. }
  25. }

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. Data d2 = new Data();
  9. d2.I = 1;
  10. client.Add2(ref d2);
  11. Console.WriteLine("d2.I={0}", d2.I);
  12. }

输出:

d.I=1

d2.I=11

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

分享文章:WCF消息模式基本内容简述
新闻来源:http://www.shufengxianlan.com/qtweb/news40/507490.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联