前言:本文旨在帮助从未接触过wcf(.svc文件)的webservice开发人员,快速将传统的webService/asmx技术迁移到wcf。高手就不用浪费时间往下看了:)

以下所有操作均为vs2010 sp1环境

一、服务物理文件创建方式的变化

1.1 asmx的创建方式

新建项-->Web服务

1.2 wcf的创建方式

新建项-->Wcf服务

二、方法定义上的区别

2.1 asmx中的方法定义

2.2 wcf 中的方法定义

这里先啰嗦一下,默认情况下创建一个wcf服务(比如HelloWorld2.svc文件)后,vs.net会自动创建一个IHelloWorld2.cs的接口,然后HelloWorld2类会实现这个接口。

如果这让您感觉不安,可以大胆的把IHelloWorld2.cs接口删除!然后把HelloWorld2.svc.cs中的代码改成下面这样:

即:

a)在需要暴露的class前加上[ServcieContract]标签

b)在需要暴露的Method前加上[OperationContract]标签

三、客户端服务引用方式的变化

实际开发中,通常service层是一个单独项目,而调用service的是另一个项目,所以我们再创建一个Web Application(或WebSite),以充当调用服务器的客户端应用

3.1 asmx引用方式

右击"添加服务引用",会出来一个对话框

如果您用习惯了vs.net2008的"添加服务引用",对这个界面可能会感觉很陌生,没关系,vs2010允许您找回旧时熟悉的感觉,继续点击"高级"

继续点击"添加服务引用",下面这个界面应该再熟悉不过了吧

点击"此解决方案中的Web服务",选择HelloWorld.asmx,Web引用名填写成"YJM"(当然也可以自己随便写)

点击"添加引用"完事,完了以后,在vs2010中与vs2008有一些区别:

在vs2010中web.config中会变成

<applicationSettings>
<WebClient.Properties.Settings>
<setting name="WebClient_YJM_HelloWorld" serializeAs="String">
<value>http://localhost:3538/HelloWorld.asmx</value>
</setting>
</WebClient.Properties.Settings>
</applicationSettings>

而vs2008添加服务引用后,是类似

<appSettings>
<add key="YJM.HelloWorld" value="http://localhost:3538/HelloWorld.asmx"/>
</appSettings>

注:部署到生产环境后,只要修改配置文件中的 http://localhost:3538/HelloWorld.asmx 即可实现webservice url的动态调整.(当然如果要在运行时动态指定url,就要代码处理了,后面的示例代码会给出方法)

3.2 wcf 引用方式

右击"添加服务引用",点击"发现"

选择HelloWorld2.svc,命名空间填写"YJM2"(当然也能是其它名字)

点击“确定”完成,web.config中会多出一节内容:

    <system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_HelloWorld2" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:3538/HelloWorld2.svc" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_HelloWorld2" contract="YJM2.HelloWorld2"
name="BasicHttpBinding_HelloWorld2" />
</client>
</system.serviceModel>

注:部署到生产环境后,只要修改配置文件中的 http://localhost:3538/HelloWorld2.svc 即可实现wcf url的动态调整.

四、客户端调用代码的变化

这部分太简单了,直接上代码吧

using System;
using WebClient.YJM;
using WebClient.YJM2; namespace WebClient
{
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
#region asmx/webservice调用示例
using (HelloWorld ws = new HelloWorld())
{
//System.Diagnostics.Debug.WriteLine(ws.Url);
//System.Diagnostics.Debug.WriteLine(Properties.Settings.Default.WebClient_YJM_HelloWorld);
//ws.Url = "http://www.youWeb.com/xxx.asmx"; //如果需要动态切换asmx的地址,这一行代码就给出了方法
string result = ws.Hello("client_asmx");
Response.Write("asmx call:" + result + "
");
}
#endregion #region svc/wcf 调用示例
using (HelloWorld2Client client = new HelloWorld2Client())
{
//System.Diagnostics.Debug.Write(client.Endpoint.ListenUri.ToString());
//client.Endpoint.ListenUri = new Uri("http://www.youWeb.com/xxx.svc");//如果需要动态切换svc的地址,这一行代码就给出了方法
string result = client.Hello("client_wcf");
Response.Write("wcf call:" + result + "
");
}
#endregion
}
}
}

运行结果:

示例源码下载:http://files.cnblogs.com/yjmyzz/asmx_update_to_wcf.zip

相信有webservice经验的同学们,看完本篇,已经能顺利升级到wcf了。当然wcf深究下去,远不止本文所写的这么简单,这门技术水还是相当深的,强烈推荐多看看园子里http://www.cnblogs.com/artech/ 的文章,他是园子里(甚至可以说是国内) 我心目中的 wcf第一人,多去看看,必有收获。

转:asmx迷10分钟升级成wcf熟手指南的更多相关文章

  1. 10分钟精通SharePoint - SharePoint升级

    类型: b2b(安装更新)和v2v(跨版本升级) 内容:二进制文件和数据库 过程:   升级前检查 - 检查场内数据,配置和自定义等等 升级准备和计划 - 根据需要和升级检查制定相应计划和准备工作   ...

  2. 10分钟精通SharePoint - SharePoint安装

    简介 接触SharePoint就避免不了要接触SharePoint安装,无论你是对SharePoint进行开发还是管理(终端用户除外).SharePoint的安装涉及到两部分:预装.安装和配置,这主要 ...

  3. 【转】让你10分钟搞定Mac--最简单快速的虚拟安装

    文章出处:让你10分钟搞定Mac--最简单快速的虚拟安装http://bbs.itheima.com/thread-106643-1-1.html (出处: 黑马程序员训练营论坛) 首先说明一下. 第 ...

  4. [转]10分钟梳理MySQL知识点:揭秘亿级高并发数据库调优与最佳实践法则

    转:https://mp.weixin.qq.com/s/RYIiHAHHStIMftQT6lQSgA 做业务,要懂基本的SQL语句: 做性能优化,要懂索引,懂引擎: 做分库分表,要懂主从,懂读写分离 ...

  5. 在net中json序列化与反序列化 面向对象六大原则 (第一篇) 一步一步带你了解linq to Object 10分钟浅谈泛型协变与逆变

    在net中json序列化与反序列化   准备好饮料,我们一起来玩玩JSON,什么是Json:一种数据表示形式,JSON:JavaScript Object Notation对象表示法 Json语法规则 ...

  6. 10分钟彻底理解Redis持久化和主从复制

    在这篇文章,我们一起了解 Redis 使用中非常重要的两个机制:Reids 持久化和主从复制. 什么是 Redis 持久化? Redis 作为一个键值对内存数据库(NoSQL),数据都存储在内存当中, ...

  7. 10分钟梳理MySQL核心知识点

    数据库的使用,是开发人员的基本功,对它掌握越清晰越深入,你能做的事情就越多. 做业务,要懂基本的SQL语句:做性能优化,要懂索引,懂引擎:做分库分表,要懂主从,懂读写分离... 今天我们用10分钟,重 ...

  8. JavaScript 10分钟入门

    JavaScript 10分钟入门 随着公司内部技术分享(JS进阶)投票的失利,先译一篇不错的JS入门博文,方便不太了解JS的童鞋快速学习和掌握这门神奇的语言. 以下为译文,原文地址:http://w ...

  9. emacs最简单入门,只要10分钟

    macs最简单入门,只要10分钟  windwiny @2013    无聊的时候又看到鼓吹emacs的文章,以前也有几次想尝试,结果都是玩不到10分钟就退出删除了. 这次硬着头皮,打开几篇文章都看完 ...

随机推荐

  1. Ruby Profiler 详解之 stackprof

    简介 stackprof 是基于采样的一个调优工具,采样有什么好处呢?好处就是你可以线上使用,按照内置的算法抓取一部分数据,只影响一小部分性能.它会产生一系列的 dump 文件,然后你在线下分析这些文 ...

  2. 由浅入深了解Thrift之客户端连接池化

    一.问题描述 在上一篇<由浅入深了解Thrift之服务模型和序列化机制>文章中,我们已经了解了thrift的基本架构和网络服务模型的优缺点.如今的互联网圈中,RPC服务化的思想如火如荼.我 ...

  3. 服务接口API限流 Rate Limit 续

    一.前言 上一篇文章中粗浅的介绍使用Redis和基于令牌桶算法进行对服务接口API限流,本文介绍另一种算法---漏桶算法的应用.Nginx想必大家都有所了解是一个高性能的 HTTP 和反向代理服务器, ...

  4. SPL学习 迭代器

    主要学习内容: 慕课网的spl视频教程 阮一峰SPL学习笔记 http://www.ruanyifeng.com/blog/2008/07/php_spl_notes.html SPL类详解 http ...

  5. 2015年4月 15款免费jQuery插件

    点这里 We have collected for you the 15 fresh, free and handy jQuery plugins that will help to speed up ...

  6. (转)STL中set的用法

    转载自here 1.关于set map容器是键-值对的集合,好比以人名为键的地址和电话号码.相反地,set容器只是单纯的键的集合.例如,某公司可能定义了一个名为bad_checks的set容器,用于记 ...

  7. 说说Java中的代理模式

    今天看到传智播客李勇老师的JDBC系列的第36节——通过代理模式来保持用户关闭连接的习惯.讲的我彻底蒙蔽了,由于第一次接触代理模式,感到理解很难,在博客园找到一篇文章,先记录如下: 引用自java设计 ...

  8. 【hdu1573-X问题】拓展欧几里得-同余方程组

    http://acm.hdu.edu.cn/showproblem.php?pid=1573 求小于等于N的正整数中有多少个X满足: X mod a0 = b0 X mod a1 = b1 …… X  ...

  9. linux 中permission denied的问题:

    执行安装命令的时候 ./install 遇到 permission denied, bash: ./install: Permission denied另外,在 root下也是同样的问题, 请教该如何 ...

  10. python流程控制语句 ifelse - 3

    #! /usr/bin/python x = input ('please inut a integer:') x = int(x) : print ('你输入了一个负数') elif x == : ...