View Code

staticvoid Main(string[] args)
{
Console.WriteLine("请输入num1,num2");
int num1 = Convert.ToInt32(Console.ReadLine());
int num2 = Convert.ToInt32(Console.ReadLine());

//获取计算加法服务
MySumServiceMex.WcfServiceClient sum =new client2.MySumServiceMex.WcfServiceClient();
//将之传给服务端
int num = sum.Sum(num1, num2);
//输出返回结果
Console.WriteLine("和为{0}", num);
//获取person服务
MySumServiceMex.Person persongender =new client2.MySumServiceMex.Person();

Console.WriteLine("请输入性别和姓名:");
//取出用户输入的姓名和性别
persongender.Gender = Console.ReadLine();
persongender.Name = Console.ReadLine();
//将姓名和性别重新返回给服务端,定义心得对象newperson来接受返回值
MySumServiceMex.Person newperson = sum.ChangeGender(persongender);

//将新的对象性别和姓名输出
Console.WriteLine("性别为{0},姓名为{1}", newperson.Gender, newperson.Name);
Console.ReadKey();
}

建立wf文件名为IWcf

View Code

namespace IWcf
{

//ServiceContract定义wcf服务
[ServiceContract]
publicinterface IWcfService
{
//OperationContract将服务方法暴露给用户
[OperationContract]
int Sum(int num1,int num2);

[OperationContract]
Person ChangeGender(Person person);
}
//DataContract定义次对象可以被序列化,但是仅仅定义了这个而不定义DataMember的话用户是不能序列化特定属性的
[DataContract]
publicclass Person
{
string gander =string.Empty;
string name =string.Empty;

//DataMember定义某个属性可以被序列化
[DataMember]
publicstring Gender
{
get { return gander; }
set { gander = value; }
}
[DataMember]
publicstring Name
{
get { return name; }
set { name = value; }
}

}
}

实现类

View Code

namespace IWcf
{
publicclass WcfSerivce:IWcfService
{

#region IWcfService 成员

//实现加法运算
publicint Sum(int num1, int num2)
{
return num1 + num2;
}
#endregion

#region IWcfService 成员

//将客户端的数据进行逻辑处理,即将性别翻转,这样就实现客户端与服务端的数据通讯交互,即序列化得实现
public Person ChangeGender(Person person)
{

if (person.Gender =="男")
{
person.Gender ="女";
}
elseif (person.Gender =="女")
{
person.Gender ="男";
}
return person;
}

#endregion
}
}

配置文件

View Code

<configuration>
<system.serviceModel>
<bindings />
<client />
<services>
<service name="IWcf.WcfSerivce" behaviorConfiguration="sumservicewcf">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8008/mysumservice"/>
</baseAddresses>
</host>
<endpoint address="" binding="wsHttpBinding" contract="IWcf.IWcfService"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="sumservicewcf">
<serviceMetadata httpGetEnabled="True"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>

服务启动

View Code

publicstaticvoid Main(string[] args)
{
ServiceHost host =new ServiceHost(typeof(IWcf.WcfSerivce));
try
{
host.Open();
Console.WriteLine("Service open");
Console.ReadLine();
}
catch
{
Console.WriteLine("WCF服务异常");
Console.ReadLine();
}
}

客户端实现

View Code

1 staticvoid Main(string[] args)
2 {
3 Console.WriteLine("请输入num1,num2");
4 int num1 = Convert.ToInt32(Console.ReadLine());
5 int num2 = Convert.ToInt32(Console.ReadLine());
6
7 //获取计算加法服务
8   MySumServiceMex.WcfServiceClient sum =new client2.MySumServiceMex.WcfServiceClient();
9 //将之传给服务端
10  int num = sum.Sum(num1, num2);
11 //输出返回结果
12   Console.WriteLine("和为{0}", num);
13 //获取person服务
14   MySumServiceMex.Person persongender =new client2.MySumServiceMex.Person();
15
16
17 Console.WriteLine("请输入性别和姓名:");
18 //取出用户输入的姓名和性别
19   persongender.Gender = Console.ReadLine();
20 persongender.Name = Console.ReadLine();
21 //将姓名和性别重新返回给服务端,定义心得对象newperson来接受返回值
22 MySumServiceMex.Person newperson = sum.ChangeGender(persongender);
23
24
25 //将新的对象性别和姓名输出
26 Console.WriteLine("性别为{0},姓名为{1}", newperson.Gender, newperson.Name);
27 Console.ReadKey();
28 }

转载于:https://www.cnblogs.com/happygx/archive/2011/04/28/2031845.html

WCF元数据交互及其序列化相关推荐

  1. WCF 第六章 序列化和编码之DataContractJsonSerializer

    DataContractJsonSerializer支持使用以JavaScript 对象标记作为序列化格式并添加到.NET 3.5 Framework 中.如果从一个使用JavaScript 的网络应 ...

  2. WCF 第六章 序列化与编码 编码选择

    文本编码与二进制编码 在WCF之前,你有很多创建分布式应用程序的选择.其中的两个选择是.NET Remoting和ASP.NET 网络服务..NET Remoting 很适合.NET 应用程序间的通信 ...

  3. WCF学习笔记之序列化

    DataContractAttribute 与 DataMenberAttribute DataContractAttribute该特性只能用于枚举.类和结构体,而不能用于接口:又因为DataCont ...

  4. WCF元数据发布的2种方式:httpGetEnabled与mex

    一.元数据即WSDL,描述了服务的细节,以便客户端使用. 二.必须为服务配置ServiceMetadata行为,才能为其生成WSDL,才能再使用httpGetEnabled或mex将其公布出去 三.这 ...

  5. 一步一个脚印学习WCF系列之WCF概要—生成元数据与代理(五)

    阅读目录 一:契约与元数据 二:服务描述与元数据 一:契约与元数据 . 客户端与服务端之间共享的应该是Contract契约而不是代码,就是前面我们讲的文章"一步一个脚印学习WCF之WCF概要 ...

  6. WCF系列(五) -- 也谈序列化(下)

    1. DataContractSerializer支持的类型...................................................................... ...

  7. WCF技术剖析之二十六:如何导出WCF服务的元数据(Metadata)[实现篇]

    元数据的导出就是实现从ServiceEndpoint对象向MetadataSet对象转换的过程,在WCF元数据框架体系中,元数据的导出工作由MetadataExporter实现.MetadataExp ...

  8. 十五天精通WCF——第十二天 说说wcf中的那几种序列化

    转自:https://www.cnblogs.com/huangxincheng/p/4660251.html 我们都知道wcf是由信道栈组成的,在我们传输的参数走到传输信道层之前,先需要经过序列化的 ...

  9. WCF技术剖析之二十一:WCF基本异常处理模式[中篇]

    通过WCF基本的异常处理模式[上篇], 我们知道了:在默认的情况下,服务端在执行某个服务操作时抛出的异常(在这里指非FaultException异常),其相关的错误信息仅仅限于服务端可见,并不会被WC ...

最新文章

  1. Effective C++ Item 30 inline里里外外
  2. Elasticsearch索引分析
  3. 201671030107胡文艳实验三作业互评与改进报告
  4. TCP传输过程中丢包问题
  5. LeetCode 1624. 两个相同字符之间的最长子字符串
  6. swift使用mysql教程,Swift学习教程之SQLite的基础使用
  7. 力扣59-螺旋矩阵(C++)
  8. 一个关于传奇3G游戏的感言
  9. selenium中文文档_基于selenium的大麦网演唱会抢票程序
  10. Kmeans参数n_clusters_labels_centers_
  11. DELL G7 重装win10系统
  12. 【单片机毕业设计】【mcuclub-103】智能花盆 | 智能养殖箱 | 多功能花盆 | 多功能养殖箱【实物设计】
  13. 云标签,关键字图排版 html5 canvas版
  14. 30分钟教你写出10分的淘宝标题
  15. Python第三方库之MedPy
  16. Acme Corporation UVA11613 网络流
  17. android微信怎么建群,微信可以建群吗 图文教你微信怎么建群
  18. Ubuntu(乌班图)常用命令
  19. Mybatis之关联关系映射
  20. CodeForces #549 Div.2 D. The Beatles

热门文章

  1. vue和react的diff算法对比
  2. 今天来谈谈面试官最喜欢问JS中的闭包问题吧
  3. java商城管理系统_基于SSM框架的JAVA商场管理系统
  4. 为什么越来越多的人喜欢旅游?
  5. 产品,是解决问题的载体
  6. 2060 super和5700xt哪个值得买?
  7. 你觉得一个人有几个手机号合适?
  8. The developer claims that Bpytop
  9. 进程调度的时机切换与过程调度方式
  10. Zookeeper本地安装配置(windows)