刚刚.Net相关知识技术互动平台(绿色天堂)
.Net知识技术交流、探讨、请教与共享(Visual Studio.Net、Asp.Net、VB/C#、.NetWindows应用程序、Windows服务、Socket通信、GIS、ArcGIS、JavaScript、Sql Server和Oracle等)
posts - 73,  comments - 475,  trackbacks - 40
        在《Web服务初探:用Demo学Web服务系列(1)——写在学前的话》中已经阐述了有关在开发Web Services前所必须具备的开发环境,在这里我要补充的一点是除了在《Web服务初探:用Demo学Web服务系列(1)——写在学前的话》中所说的一些必须具备的条件外,还要必须安装上IIS,只有这样才能部署所开发的Web Services。
        下面是我的开发环境配置:
操作系统:WindowsXP番茄花园版(已安装了IIS)
开发工具:Microsoft Visual Studio.Net2005
开发所用语言:Visual C#

        在这里我就不过多地讲解Web Services工程的建立及其Web Services名称的修改。现在我们假设刚刚建立好一个Web Services工程,将App_Code文件夹中的.cs文件打开,您会看见代码如下(本代码中的文件名和类名已改变,将Web Services默认的文件名和类名改变为MyServiceClass):
 1using System;
 2using System.Web;
 3using System.Web.Services;
 4using System.Web.Services.Protocols;
 5
 6[WebService(Namespace = "http://tempuri.org/")]
 7[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
 8public class MyServiceClass : System.Web.Services.WebService
 9{
10    public MyServiceClass()
11    {
12
13        //如果使用设计的组件,请取消注释以下行 
14        //InitializeComponent(); 
15    }

16
17    [WebMethod]
18    public string HelloWorld() {
19        return "Hello World";
20    }
    
21}
这里需要注意的是在每个需要外部程序调用的方法名前必须加入[WebMethod],同时将方法定义为public方法。在此我们将默认的方法Hello World()删除,输入下面的方法:
 1public bool Login(string UserName,string PassWord)
 2    {
 3        if (UserName == "Micky" && PassWord == "micky0")
 4        {
 5            return true;
 6        }

 7        else
 8        {
 9            return false;
10        }

11    }
 
我们就可以用外部程序来调用这个简单的用户身份验证方法了。可以在开发环境中测试这个方法,点击Visual Studio.Net2005的运行按钮,或按键盘的F5启动这个工程。如下图:

点击“Login”,则会出现如下图所示的页面内容:

在UserName中输入“Micky”,在PassWord中输入“micky0”后,点击“调用”按钮,将在新的页面中返回如下的XML信息:
1  <?xml version="1.0" encoding="utf-8" ?> 
2  <boolean xmlns="http://tempuri.org/">true</boolean>
其中在<boolean>节的内容是“true”则说明,当我们点击“调用”按钮,把UserName“Micky”和PassWord“micky0”发送给Web Services时,Web Services解析了一个含Http协议的Soap消息,从中获得了所要调用的方法名称和传递的两个参数的值,并从MyServiceClass类中寻找标有[WebMethod]和public的方法。如果找到了相同的方法,将参数值传递给该方法。此处方法是返回一个布尔值,所以我们得到了结果“true”。当然,如果我们在UserName中输入非“Micky”的值或在PassWord中输入非“micky0”的值,我们会得到结果“false”(大家可以自己试验一下)
        此时我们就编写出了一个功能非常简单Web Services。下一个随笔我们将讲解在Visual Studio.Net2005的C/S程序中如何调用这个功能非常简单的Web Services,并且我们在后面的Demo中会不断地使用或改写这个Web Services。

注:这个Web Services的例子讲解的有些简单,可能对大部分人都懂,但照顾到一些没有接触过Web Services的博友,觉得还有有必要讲解一下。文中有什么不当之处或有什么疑问请在“评论”中指出,也欢迎您加入《ASP.NET AJAX技术联盟》QQ群来共同讨论。

转载本文说明(以下简称本说明):必须遵守《刚刚网络作品版权声明》,再转载。"本说明、作者、作者博客网址及作者博客坐落,本文中提及的各种说明、备注或附录性文字"必须被转载,且不得改变其原有内容和要表达的意图!
作者:刚刚   作者博客网址:http://lijigang.cnblogs.com/   作者博客坐落在博客园
把握现实生活,培养自身能力
掌握新型技术,提高自我力量

posted on 2006-10-30 02:46 刚刚 阅读(3215) 评论(25)  编辑 收藏 所属分类: WebServices XML技术

FeedBack:
2006-10-30 08:28 | ocean2000[匿名] [未注册用户]
"并从MyServiceClass类中寻找标有[WebMethod]和public的方法。如果找到了相同的方法,将参数值传递给该方法"
个人对于内部机制不算明白,lz先说传名称还有参数至webservice,既然这样要定位该方法,我觉的是用名称先定位吧,再看是否符合你说的那两个条件?
  回复  引用    
#2楼 [楼主]
2006-10-30 11:06 | 刚刚      
@ocean2000[匿名]
你好。据我所知,对于WebService而言,因为只有标有[WebMethod]并且是public的方法才能被外部程序调用,所以只要在MyServiceClass类的所有方法中,若是不符合这两个条件的方法时,WebService会认为此方法是不被外部程序调用的方法,因此在编译过后,就知道有哪些方法是被外部程序调用的,能被外部程序调用的方法就能像“Login”一样在调试的时候显示出来,而没有标有[WebMethod]和public的方法,在显示方法“Login”的页面内容上是看不见类中的不被标记的这些方法的。
  回复  引用  查看    
2006-10-30 11:12 | TheOLD(远古) [未注册用户]
顶刚刚,这种由浅入深的方法我喜欢。
如果刚刚能在文章后边再深入讲一下这些参数的来由和一些非基本用法就更好了
比如楼上的同志也提到了内部机制,你可以讲一下“MyServiceClass类遍历[WebMethod]属性和public约束的方法,匹配并传递参数,运行,返回”的原理,或webservice属性能描述哪些东西。
以上纯属个人YY,说错了别见怪。
  回复  引用    
#4楼 [楼主]
2006-10-30 11:28 | 刚刚      
@TheOLD(远古)
呵呵,好我会考虑的。
  回复  引用  查看    
2006-10-30 15:50 | KiddLee      
刚开始学习WebService,希望能多多交流
  回复  引用  查看    
#6楼 [楼主]
2006-10-30 16:12 | 刚刚      

@KiddLee
好的。大家一起努力。呵呵……


  回复  引用  查看    
2006-10-31 18:06 | 菜鸟[匿名] [未注册用户]
E:\vsNET\Common7\IDE> "C:\WINNT\Microsoft.NET\Framework\v2.0.50727\csc.exe" /t:library /utf8output /R:"C:\WINNT\assembly\GAC_32\System.Web\2.0.0.0__b03f5f7f11d50a3a\System.Web.dll" /R:"C:\WINNT\assembly\GAC_MSIL\System.Xml\2.0.0.0__b77a5c561934e089\System.Xml.dll" /R:"C:\WINNT\assembly\GAC_MSIL\System\2.0.0.0__b77a5c561934e089\System.dll" /R:"C:\WINNT\assembly\GAC_MSIL\System.Web.Services\2.0.0.0__b03f5f7f11d50a3a\System.Web.Services.dll" /R:"C:\WINNT\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll" /R:"C:\WINNT\assembly\GAC_MSIL\System.Drawing\2.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll" /R:"C:\WINNT\assembly\GAC_32\System.EnterpriseServices\2.0.0.0__b03f5f7f11d50a3a\System.EnterpriseServices.dll" /R:"C:\WINNT\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\website\02a0d807\69405187\App_Code.rqurzzbw.dll" /R:"C:\WINNT\assembly\GAC_32\System.Data\2.0.0.0__b77a5c561934e089\System.Data.dll" /R:"C:\WINNT\assembly\GAC_MSIL\System.Web.Mobile\2.0.0.0__b03f5f7f11d50a3a\System.Web.Mobile.dll" /R:"C:\WINNT\assembly\GAC_MSIL\System.Configuration\2.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll" /out:"C:\WINNT\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\website\02a0d807\69405187\App_Web_rdc1iik2.dll" /debug- /optimize+ /w:4 /nowarn:1659;1699 "C:\WINNT\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\website\02a0d807\69405187\App_Web_rdc1iik2.0.cs" "C:\WINNT\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\website\02a0d807\69405187\App_Web_rdc1iik2.1.cs" "C:\WINNT\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\website\02a0d807\69405187\App_Web_rdc1iik2.2.cs"


Microsoft (R) Visual C# 2005 编译器 版本 8.00.50727.42
用于 Microsoft (R) Windows (R) 2005 Framework 版本 2.0.50727
版权所有 (C) Microsoft Corporation 2001-2005。保留所有权利。

e:\WebSite\Default.aspx.cs(24,6): error CS0246: 找不到类型或命名空间名称“WebMethod”(是否缺少 using 指令或程序集引用?)
e:\WebSite\Default.aspx.cs(14,2): error CS0246: 找不到类型或命名空间名称“WebService”(是否缺少 using 指令或程序集引用?)
e:\WebSite\Default.aspx.cs(15,2): error CS0246: 找不到类型或命名空间名称“WebServiceBinding”(是否缺少 using 指令或程序集引用?)

我是一个超级菜鸟,复制上去的时候出现这个是什么错误,呵!希望说明一二

  回复  引用    
#8楼 [楼主]
2006-11-01 00:00 | 刚刚      
@菜鸟[匿名]
你用的VS.Net2005吗?
请你不要把代码粘贴到VS.Net2003中。
  回复  引用  查看    
2006-11-01 08:56 | 菜鸟[匿名] [未注册用户]
我是VS.net2005的,就搞不明白
  回复  引用    
2006-11-01 09:31 | 菜鸟[匿名] [未注册用户]
我是在App_Code文件里面的MyServiceClass.cs,每次调试就会错误,麻烦LZ了.
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class MyServiceClass : System.Web.Services.WebService
{
public MyServiceClass()
{

//如果使用设计的组件,请取消注释以下行
//InitializeComponent();
}

[WebMethod]
public bool Login(string UserName,string PassWord)
{
if (UserName == "Micky" && PassWord == "micky0")
{
return true;
}
else
{
return false;
}
}
}
  回复  引用    
#11楼 [楼主]
2006-11-01 11:05 | 刚刚      
@菜鸟[匿名]
你不能使用“文件系统”,请你使用“Http”,在使用“Http”之前要保证操作系统中有IIS。
从你的错误提示中“e:\WebSite\Default.aspx.cs”,我认为你在建立这个WebSite的Web服务工程时没有选择“Http”,而是选择了“文件系统”建立的。
请你舍弃你这个出错的工程。然后按照下面的步骤从新建立。
1、打开VS.Net2005,建立一个ASP.Net Web 服务。从菜单项“文件”——>“新建”——>“网站”。
2、在弹出的窗口中选择“ASP.Net Web 服务”后,在下面的“位置”中选择“Http”其后的文本框中改名称为“http://localhost/MyServiceDemo”。在其下方的“语言”中选择“Visual C#”,完成后点击“确定”按钮。
3、当工程建立之后,更改你的App_Code文件夹下的文件名为“MyServiceClass.cs”和工程中的其中一文件名改为“MyServiceClass.asmx”,在打开这个文件“MyServiceClass.asmx”将里面的代码全部替换为如下“<%@ WebService Language="C#" CodeBehind="~/App_Code/MyServiceClass.cs" Class="MyServiceClass" %>”。
4、按照上面的步骤都完成后,你再将App_Code文件夹下的“MyServiceClass.cs”文件打开,复制上述代码将此文件中的代码全部替换。
5、运行调试。
  回复  引用  查看    
2006-11-02 15:49 | 天上[匿名] [未注册用户]
不错 学习ing
  回复  引用    
#13楼 [楼主]
2006-11-02 17:23 | 刚刚      
@天上[匿名]
:)
  回复  引用  查看    
2006-11-13 16:16 | 菜鸟[匿名] [未注册用户]
谢谢, 刚刚,你很细心,真的很谢谢!
  回复  引用    
2006-11-29 10:45 | yunhuasheng      
支持!
  回复  引用  查看    
2007-03-19 11:51 | fu [未注册用户]
不好意思问一下,怎么发布的啊?我怎么搞都引用不了.......
引用时在本地WebService中能看到,但是继续的话就显示..

------------------------------------------------------------
无法显示 XML 页。
使用 XSL 样式表无法查看 XML 输入。请更正错误然后单击 刷新按钮,或以后重试。


--------------------------------------------------------------------------------

名称以无效字符开头。处理资源 'http://localhost/WebServiceDemo/Service.asmx' 时出错。第 1 行,位置: 2

<%@ WebService Language="vb" CodeBehind="~/App_Code/Service.vb" Class="Service" %>
-^
-------------------------------------------------------

兄弟帮帮忙嘞......

  回复  引用    
2007-03-19 13:56 | fu [未注册用户]
我晕,试了好几次,可以了.....
  回复  引用    
#18楼 [楼主]
2007-03-20 19:20 | 刚刚      
@fu
对不起,我没有即时看见你的帖子,不过你的问题应该是引用的文件名称出错了吧?
  回复  引用  查看    

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-09-29 11:55 编辑过
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接:
 
郑重声明:
本博客的所有内容均使用
{刚刚网络作品版权声明}
保护本博客网络作品版权
    非常欢迎您的到来!Asp.Net Ajax已经出台正式的第3.5版了,现将有关下载放在了本博客的置顶随笔中,有需要者请大家浏览此置顶随笔或者点击此处,因博客园上传附件大小和空间容量有限,刚刚(也就是本人)决定将最新版本放在CSDN资源上,望广大博友谅解。如果有人希望最新动态,请关注官方网站,网址请点击此处
本人其他博客:超越自我de博客刚刚.Net相关知识技术互动平台(粉色回忆)163博客百度博客

     ——刚刚 (公告)
现在很晚了,忙到现在,睡了! 10-14 02:53

<2006年10月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

与我联系

搜索

 

常用链接

留言簿(12)

我管理的小组

我参与的团队

随笔分类(79)

随笔档案(73)

文章分类(1)

文章档案(1)

收藏夹(153)

本人其他博客

园子里的优秀博客

最新随笔

积分与排名

  • 积分 - 107009
  • 排名 - 377

最新评论

阅读排行榜

评论排行榜