随笔-197  评论-2252  文章-1  trackbacks-63

你会在C#的类库中添加web service引用吗?

     本文并不是什么高深的文章,只是VS2008应用中的一小部分,但小部分你不一定会,要不你试试: 

     本人对于分布式开发应用的并不多,这次正好有一个项目要应用web service,我的开发环境是vs2008,之所以没有选择现在热门的WCF,本人有如下原因:
 

     1:负责开发Web Service的小组对于vs2008应用不多,更不能奢望令人垂涎的WCF。
     2:项目开发时间有限,根本不许你去拿项目做实验。
     3:项目改动不大,web service足够对付需求。
 
      由于我们的项目是从1.1直接升级到3.5,升级的时候,把web项目直接改成类库,这样无论环境发生多大的变化,只要能够兼容低级版本,所有原来的文件都是能用的,例如,1.1中创建一个网页,会有一个resx的资源文件,但是3.5中创建的网页则是designer.cs,以后如果再升级,只要把相关新文件类型创建好,然后添加到类库中,这样同样可以享用高级版本的功能,说的比较含糊,不知道大家是否明白。

     现在要做的就是在这样的类库中引用web service,凭直觉就认为,只要添加一下引用不就行了吗?其实是这样的吗?
   
     先说下在web application项目中如何引用:


     第一:对web项目点击右键,如图一。


    

 

     第二:点击添加web 引用,如下图二.


    

 

     第三:查找可用的web service,如果是本解决方案内的直接搜索就行,如果是外部的,就输入有效地址然后查询,这里面可以测试web service,如图三:


    

 

      第四:添加引用成功后就会出现Web References目录.如图四,然后就是调用了。


   
  

       这应该就是最基本的添加web service引用的方法了。当时我也是按照这样的思路去添加。发现类库中点击右键并没有出现我熟悉的 “添加web 引用”,而出现图五效果:

 

  

 

       此时我认为可能是升级的原因变成"添加服务引用",接下来的操作和上面操作相同.点击出现图六;


    
  

       输入web service地址,测试连接都成功,添加成功后出现图七:

 

        然而调用的时候并不像想像的那么成功,结果可想而之,我添加的WCF服务。这里错误代码我就不好意思帖了。知道引用对象错了后,就是让类库来添加web service,然而点击类库后,右键并没有"添加web 服务"的选项。如何让类库支持添加web service引用成了我最大的难题。此时我咨询了同事,基本排除程序问题,因为通过网站形式可以正常访问web service。

        园子里的朋友你们在VS08中的类库会添加web servece引用吗?我baidu了一下午,毫无结果,最好只好再问别的同事,几经周折,有一个太有才的同事说类库可以添加web service引用,我不敢相信,我把方法贴出来show一下;
  

        第一:对目标类库点击右键,如图六:
        第二:点击“添加服务引用”如图八:

 

        关键是图左下角的“高级”按键。点击如图九:
  

      

            第三:注意了,同样是左下角,“添加WEB引用”的按钮终于出现了,点击如图十:之后的操作就不多说了。

 

 

         到这里,就最终完成了类库中添加web service引用的目的。操作并不复杂,只是实在是想不明白,VS为什么要把添加web引用放的这么隐蔽呢,难道是为了WCF的推广?

标签: C#, .NET
posted on 2008-09-16 21:05 min.jiang 阅读(6588) 评论(20) 编辑 收藏

评论:
#1楼 2008-09-16 21:53 | ocean      
兄弟,我也不知道这个问题怎么解释,我经常用,从来没发现这个问题,至少我这里本身就有add web service菜单。
 回复 引用 查看   
#2楼 2008-09-16 22:03 | ocean      
还有一个问题就是,对于一个web service来说,你添加服务引用也是没有任何问题的,因为生成本地代理类就是通过web service或者WCF的元信息来生成的。我刚刚又验证了一下,我通过add service的形式添加了一个web servcie,仍然可以正常运行成功,也印证了我原先的理解。你的那个选项应该只是按照完全的.NET2.0的形式来生成代理类,而VS2008生成的代理类有一些改进。
换句话说,你可以将web service看成一种特殊的WCF。

 回复 引用 查看   
#3楼[楼主] 2008-09-16 22:06 | 姜敏      
@ ocean
对,如果你不是在类库中添加就不会遇到以上问题

 回复 引用 查看   
#4楼 2008-09-16 22:06 | 潮儿      
@ocean
博主说的是类库,你那个好像是web应用程序吧。

 回复 引用 查看   
#5楼 2008-09-16 22:09 | Steven Chen      
@ocean
今天下午刚刚用添加WCF的方式添加了WebService,发现不能工作,最后按照lz的方法添加的。

你说能工作,看来是我有些地方没有做对,明天公司再看看代码。

 回复 引用 查看   
#6楼[楼主] 2008-09-16 22:10 | 姜敏      
对于web application来说,应该是没有问题的,这里 ocean有实验,本人并没有亲自实验过.对于class librairy来说,朋友们不妨亲自试下.有些东西不亲自遇到还真不知道其中的困难.
 回复 引用 查看   
#7楼[楼主] 2008-09-16 22:12 | 姜敏      
@Steven Chen
看来这个问题还不止我一人遇到过啊,希望给朋友带来些帮助.

 回复 引用 查看   
#8楼 2008-09-16 22:18 | Steven Chen      
俄 果然如lz所说,webApplication出现了 添加Web引用, 但是类库项目,Console程序,Winform程序都不可以的。

我想可能是MS的一个小Bug,或者说MS不想让我们在用以传统的WebService的client了,而是使用类似于WCFClient的咚咚。

 回复 引用 查看   
#9楼 2008-09-16 22:21 | ocean      
刚刚没仔细看,不好意思。
我又试验了一下类库,新建了一个类库,然后add service,然后再在web app里面引用这个类库,结果一样,完全能调用啊。
你在类库里面add service还是在web app里面add service,都是用同一个命令行工具来生成代理类的,我比较了一下他们生成的代理类,好像没什么区别。所以在类库里面添加web service直接add service就可以了。我认为那个额外的选项只是为了生成完全和.NET2.0一模一样的代理类的,而VS2008带的代理类生成工具,生成的代理类和VS2005生成的有些差异的。我们也可以用一个命令行自己生成代理类,那个命令我忘记了,你可以自己查查。
其实我觉得不难理解,微软没有道理为web app和class lib各写一个代理类生成工具,所以生成的代理类应该完全一样的。

 回复 引用 查看   
#10楼 2008-09-16 22:25 | Steven Chen      
@ocean
应该是我某个操作没有弄好,明天再去公司看看,多谢

 回复 引用 查看   
#11楼 2008-09-16 22:25 | ocean      
我认为你可以先写一个简单的web service试验一下,看看是否正常。另外我认为可以单步调式一下,看看不能正常工作的原因。因为你add service的方式去添加一个web service,能成功生成代理类,所以VS2008是完全支持这种方式的,如果都不能工作,那就根本不会给你生成代理类了。
当然我的web service也是在VS2008里面写的,不知道有没有关系,不过web service是个标准,用VS2005和VS2008写好像没什么关系吧。

 回复 引用 查看   
#12楼 2008-09-16 22:36 | Steven Chen      
作了个测试,WebService可以通过VS生成的WCFClient调用,多谢ocean
 回复 引用 查看   
#13楼[楼主] 2008-09-16 23:14 | 姜敏      
@ocean
有是否有试过这们的情况,你的web网站,并不是web app而就是一个类库呢?你这样试下,类库也是可以当网站运行的,只是不能添加web app里面的文件,只能手工加.在没有web app的情况下试下,看添加web服务是否成功.我认为是不可靠的.

 回复 引用 查看   
#14楼 2008-09-17 10:41 | 赵俊      
标题党,你文章的名字应该改为
“你会在C#的类库中添加web service引用吗? ”

 回复 引用 查看   
#15楼[楼主] 2008-09-17 12:13 | 姜敏      
@赵俊
谢谢指正,已经修改.

 回复 引用 查看   
#16楼 2008-09-17 17:11 | 狼Robot      

楼主的VS2008什么版本的,我的就有添加web引用.

 回复 引用 查看   
#17楼 2008-09-17 17:43 | 飘遥      
1.项目属性改成.net2.0即可
2.VS生成了一陀无关的代码和文件,WSDL很好用,如果不想硬编码URL,在配置文件中手工配置。

 回复 引用 查看   
#18楼 2010-11-16 14:02 | 扬哥      
刚刚遇到这个问题!谢谢
 回复 引用 查看   
#19楼 2011-03-04 11:03 | asnow      
请教各位:
我想在Windows Mobile上实现来电去电号码的归属地显示。通过获取来电去电号码,实现来电去电号码的显示。现在我想问的是——大家所说的实现这一功能,是不是就是调用webservice就可以了吗?

 回复 引用 查看   
#20楼 2011-10-19 16:29 | 今朝-TODAY      
不错,谢谢。
 回复 引用 查看   
min的个人网站终于创建起来了
昵称:min.jiang
园龄:5年6个月
粉丝:144
关注:8
<2008年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用链接

最新随笔

随笔分类

随笔档案

Follow Me

博客园友情链接

拳皇比赛视频

积分与排名

  • 积分 - 494061
  • 排名 - 124

最新评论

阅读排行榜

评论排行榜

推荐排行榜