天使半只翼

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

 

 下面,我们将用C#建立一个名为“SecurityWebService”的Web Service。一个Web Service文件将含有形式为.asmx的扩展名。(就像Asp.net的文件扩展名为.aspx)

<%@ WebService Language="C#" class="SecurityWebService" %>  <%@ WebService Language="C#" class="SecurityWebService" %>

  这条语句将告诉编译器程序将运行在Web Service模式下以及C#类的名称。同时我们要访问Web Service的名字空间。还有,最好添加一个对System名字空间的引用。

using System;using System.Web.Services;

  该SecurityWebService的类应该继承Web Service类的功能。因此,我们添加了下面这行代码:

public class SecurityWebService : WebService

  现在我们来运用我们的面向对象的技巧编写一个C#类。C#的类和C++、Java的类非常相象,如果你有C++和Java的基础,这个就是小菜一碟了。

  .Net下的Web Service能够设定一些基本的数据类型。因此,如果我们返回“int”、“float”或是“string”等数据类型的话,它能自动将它们转化为标准的XML输出。然而不巧的是在大多数的情况下,我们需要同一个实体的一类数据集。下面我先举个例子。我们的SecurityWebService股票报价服务要求用户输入一个公司的代号,然后它会给出公司的全名以及当前的股票价格。由此,我们需要一个公司的三条信息:

  公司代号(数据类型:string)
  公司全名(数据类型:string)
  股票价格(数据类型:double)

  我们需要将单个股票报价的数据信息分解开。可以有很多方法完成此项工作,我们这里用了最好的枚举数据类型。我们在C#中用了“structs”,和C++中的structs一样。代码如下:

public struct SecurityInfo
{
public string Code;
public string CompanyName;
public double Price;
}

  现在我们已经完成所有建立Web Service所需的模块了。因此,所有的代码如下:

 

 

 

using System;
using System.Web.Services;

public struct SecurityInfo
{
    public string Code;
    public string CompanyName;
    public double Price;
}
public class SecurityWebService : WebService
{
    private SecurityInfo Security;
    public SecurityWebService()
    {
        Security.Code = "";
        Security.CompanyName = "";
        Security.Price = 0;
    }
    private void AssignValues(string Code)
    {
        // 在这里使用商业组件
        // 方法调用就是用来获得所需的数据的
        // 本程序中我给相应的代码添加了一个对应的字符串以方便显示
        // 同时,我使用了随机数产生器来生成股票价格
        Security.Code = Code;
        Security.CompanyName = Code + " Pty Ltd";
        Random RandomNumber = new System.Random();
        Security.Price = double.Parse(new System.Random(RandomNumber.Next(1,10)).NextDouble().ToString("##.##"));
    }
    [WebMethod(Description="This method call will get the company name and the price for a given security code.",EnableSession=true)]
    public SecurityInfo GetSecurityInfo(string Code)
    {
        AssignValues(Code);
        SecurityInfo SecurityDetails = new SecurityInfo();
        SecurityDetails.Code = Security.Code;
        SecurityDetails.CompanyName = Security.CompanyName;
        SecurityDetails.Price = Security.Price;

        return SecurityDetails;
    }
}

 

你可以直接用Http Get方法来调用这个Web Service。这样的话就不会出现第一个页面了,也不需要用户去点击Invoke按钮了。具体方法:

  http://server/webServiceName.asmx/functionName?parameter=parameterValue

  调用我们的Web Service的方法就是:

  http://localhost/work/aspx/SampleService.asmx/GetSecurityInfo?Code=IBM

posted on 2012-06-05 16:41  天使半只翼  阅读(426)  评论(0编辑  收藏  举报