热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

WebService学习之摄氏温度和华氏温度转换

创建一个简单的Web服务,实现摄氏温度和华氏温度之间的来回转换操作功能。知识点:1.熟悉WebService的代码结构;2.使用Wsdl.exe工具生成代理类的源代码;3.编译该代理类

创建一个简单的Web服务,实现摄氏温度和华氏温度之间的来回转换操作功能。

知识点:

1.熟悉WebService的代码结构;

2.使用Wsdl.exe工具生成代理类的源代码;

3.编译该代理类的源代码文件。

代码如下:

using System;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(COnformsTo= WsiProfiles.BasicProfile1_1)]
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
// [System.Web.Script.Services.ScriptService]
public class TemperatureService : System.Web.Services.WebService
{
public TemperatureService()
{

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

[WebMethod]
public double ToCelsius(double TF) //华氏度转成摄氏度 C=(F-32)*(5/9)
{
return (5d / 9d) * (TF - 32);
}

[WebMethod]
public double ToFahrenheit(double TC) //摄氏度转成华氏度 F=C*(9/5)+32
{
return (9d / 5d) * (TC + 32);
}
}

 

运行如下:

 

上面看到的是用浏览器获取Web服务。在有些情况下,需要在应用程序中访问Web服务,解决的办法是创建一个远程Web服务的本地代理类,调用代理类的方法等同于调用Web服务的方法。

可以用.NET的SDK中命令行工具wsdl.exe生成代理类。如果安装Microsoft Visual Studio.NET,则可在“开始”->“所有程序”->“Microsoft Visual Studio 2008”->“Visual Studio Tools”->“Visual Studio 2008 命令提示”下执行工具wsdl。如果只安装了SDK,则在C:\Program Files\Microsoft.NET\SDK目录下可以找到这个工具。当然如果我们安装了VS2008的话就不用另外安装SDK,直接可以在Visual Studio 2008命令提示中使用wsdl工具。(我在C:\Program Files\Microsoft.NET\SDK目录没有找到wsdl.exe这个执行工具,但命令一样有效。)

建立一个代理类的步骤如下:

(1)使用Wsdl.exe工具生成代理类的源代码;

(2)编译该代理类的源代码文件;

(3)将编译后的代理类拷贝到/bin目录中。

生成TemperatureService Web服务的代理类,可以用如下的命令:

wsdl /l:cs http://localhost:3861/Temperature/TemperatureService.asmx?wsdl

/l 表示用于生成代理类的源代码文件的语言,这里用的是C#。接着是提供给Wsdl的Web服务的WSDL地址,执行生成TemperatureService.cs文件(在C:\Program Files\Microsoft Visual Studio 9.0\VC目录)。

再将该文件编译成DLL文件(上一篇文章说过有关编译的方法,这里不再重复了)。但有一个地方要注意的是,如下图:

上面提示编译不成功的原因是文件路径带有空格,我们可以把TemperatureService.cs拷贝到C盘,再执行如下图:

 

最后,我们来测试一下这个代理类,可以另外新建一个项目,将TemperatureService.dll拷贝到ASP.NET目录的/bin目录下,这样就可以使用这个代码类了。

代码如下:

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>测试TemperatureService代理类title>
head>
<body>
<form id="form1" runat="server">
Fahrenheit(输入华氏温度):
<asp:TextBox ID="txtFahrenheit" runat="server">asp:TextBox>
<asp:Button ID="Convert" Text="Convert" runat="server"
onclick
="Convert_Click" />
<hr />
<asp:Label ID="lblCelsius" runat="server">asp:Label>
form>
body>
html>

 

using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}
protected void Convert_Click(object sender, EventArgs e)
{
TemperatureService objTemp = new TemperatureService();
this.lblCelsius.Text = objTemp.ToCelsius(Double.Parse(this.txtFahrenheit.Text)).ToString("n");
}
}


运行和结果如下图:

 

如果出现如下的错误:

根据提示可以知道,如想调用代理类,代理类的项目必须正在运行中,否则就会出现如上的错误。 

 

总结:

调用代理类的方法与调用其他.NET类的方法没有什么区别,但是将在后台与服务器进行大量的通信,但是这都被很好地隐藏起来。


推荐阅读
  • 本文是关于C#类型系统、值类型和引用类型的概念性笔记。介绍了C#1系统类型的三个特性,静态类型的含义,显式类型和隐式类型的区别。还讨论了类、结构、数组类型、枚举、委托类型和接口类型属于哪一种类型。同时纠正了关于结构、引用类型和对象传递的错误表述。最后提到了C#4中使用动态类型的关键字。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • switch语句的一些用法及注意事项
    本文介绍了使用switch语句时的一些用法和注意事项,包括如何实现"fall through"、default语句的作用、在case语句中定义变量时可能出现的问题以及解决方法。同时也提到了C#严格控制switch分支不允许贯穿的规定。通过本文的介绍,读者可以更好地理解和使用switch语句。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • 导出功能protectedvoidbtnExport(objectsender,EventArgse){用来打开下载窗口stringfileName中 ... [详细]
  • intellij idea的安装与使用(保姆级教程)
    intellijidea的安装与使用(保姆级教程)IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(gi ... [详细]
  • 本文介绍了一种处理AJAX操作授权过期的全局方式,以解决Asp.net MVC中Session过期异常的问题。同时还介绍了基于WebImage的图片上传工具类。详细内容请参考链接:https://www.cnblogs.com/starluck/p/8284949.html ... [详细]
  • HTML5网页模板怎么加百度统计?
    本文介绍了如何在HTML5网页模板中加入百度统计,并对模板文件、css样式表、js插件库等内容进行了说明。同时还解答了关于HTML5网页模板的使用方法、表单提交、域名和空间的问题,并介绍了如何使用Visual Studio 2010创建HTML5模板。此外,还提到了使用Jquery编写美好的HTML5前端框架模板的方法,以及制作企业HTML5网站模板和支持HTML5的CMS。 ... [详细]
  • Carve库在Visual Studio2015中的编译方法及注意事项
    本文介绍了在Visual Studio2015中编译Carve库的方法及注意事项。首先下载Carve库,并使用Visual Studio2015打开,生成后在bin目录下会生成.lib文件。同时,本文还指出了之前在Visual Studio2017中编译的问题,并提醒需要根据对应的平台进行编译,否则会出现报错。详细的步骤和注意事项请参考原文链接。 ... [详细]
  • 在C#中,使用关键字abstract来定义抽象类和抽象方法。抽象类是一种不能被实例化的类,它只提供部分实现,但可以被其他类继承并创建实例。抽象类可以用于类、方法、属性、索引器和事件。在一个类声明中使用abstract表示该类倾向于作为其他类的基类成员被标识为抽象,或者被包含在一个抽象类中,必须由其派生类实现。本文介绍了C#中抽象类和抽象方法的基础知识,并提供了一个示例代码。 ... [详细]
  • Unity3D引擎的体系结构和功能详解
    本文详细介绍了Unity3D引擎的体系结构和功能。Unity3D是一个屡获殊荣的工具,用于创建交互式3D应用程序。它由游戏引擎和编辑器组成,支持C#、Boo和JavaScript脚本编程。该引擎涵盖了声音、图形、物理和网络功能等主题。Unity编辑器具有多语言脚本编辑器和预制装配系统等特点。本文还介绍了Unity的许可证情况。Unity基本功能有限的免费,适用于PC、MAC和Web开发。其他平台或完整的功能集需要购买许可证。 ... [详细]
author-avatar
蓝紫藤田_835
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有