当前位置: 首页 > web >正文

C#进阶-ASP.NET WebForms调用ASMX的WebService接口

在ASP.NET WebForms应用程序中,调用ASMX WebService接口是一种常见的需求。ASMX WebService是基于SOAP协议的Web服务,可以在不同平台之间进行通信。本文将详细介绍如何在ASP.NET WebForms中调用ASMX WebService接口,包括添加服务引用、调用服务方法和处理响应。

一、添加WebService引用

1.1 创建ASMX WebService

首先,创建一个简单的ASMX WebService。假设我们有一个名为 MyWebService的Web服务,其中包含一个简单的方法 HelloWorld

// MyWebService.asmx.cs
using System.Web.Services;[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
public class MyWebService : WebService
{[WebMethod]public string HelloWorld(){return "Hello, World!";}
}

1.2 在ASP.NET WebForms项目中添加服务引用

  1. 右键点击项目名称,选择“添加服务引用”。
  2. 在弹出的对话框中,点击“高级...”按钮。
  3. 再点击“添加Web引用...”按钮。
  4. 在地址栏输入ASMX WebService的URL,例如 http://localhost:12345/MyWebService.asmx
  5. 点击“转到”按钮,找到Web服务并命名引用,例如 MyWebServiceRef,然后点击“添加引用”。

二、调用WebService方法

2.1 在前端页面调用WebService

在ASP.NET WebForms页面中,可以通过服务引用来调用WebService的方法。以下是一个示例,展示如何在 Default.aspx页面中调用 HelloWorld方法。

Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Default" %>
<!DOCTYPE html>
<html>
<head runat="server"><title>调用WebService示例</title>
</head>
<body><form id="form1" runat="server"><div><asp:Button ID="btnCallService" runat="server" Text="调用WebService" OnClick="btnCallService_Click" /><br /><asp:Label ID="lblResult" runat="server" Text=""></asp:Label></div></form>
</body>
</html>
Default.aspx.cs
using System;
using MyWebServiceRef; // 引用服务命名空间public partial class Default : System.Web.UI.Page
{protected void Page_Load(object sender, EventArgs e){}protected void btnCallService_Click(object sender, EventArgs e){// 创建WebService客户端实例MyWebServiceSoapClient client = new MyWebServiceSoapClient();// 调用HelloWorld方法string result = client.HelloWorld();// 显示结果lblResult.Text = result;}
}

2.2 异步调用WebService方法

为了提高用户体验,可以使用异步方式调用WebService方法。以下是异步调用的示例。

Default.aspx.cs
using System;
using System.Threading.Tasks;
using MyWebServiceRef;public partial class Default : System.Web.UI.Page
{protected void Page_Load(object sender, EventArgs e){}protected async void btnCallService_Click(object sender, EventArgs e){// 创建WebService客户端实例MyWebServiceSoapClient client = new MyWebServiceSoapClient();// 异步调用HelloWorld方法string result = await Task.Run(() => client.HelloWorld());// 显示结果lblResult.Text = result;}
}

三、错误处理与调试

3.1 错误处理

在调用WebService时,可能会遇到各种错误,如网络连接问题、服务端错误等。需要进行适当的错误处理,确保应用程序的健壮性。

protected async void btnCallService_Click(object sender, EventArgs e)
{MyWebServiceSoapClient client = new MyWebServiceSoapClient();try{string result = await Task.Run(() => client.HelloWorld());lblResult.Text = result;}catch (Exception ex){lblResult.Text = "调用服务时发生错误:" + ex.Message;}
}
​

3.2 调试技巧

  • 使用Fiddler或Wireshark:监控HTTP请求和响应,分析WebService调用过程。
  • 启用WCF日志:在客户端配置文件中启用WCF日志,以便记录详细的调用信息。
  • 检查服务URL:确保服务URL正确,服务正在运行。

四、最佳实践

4.1 使用配置文件管理服务引用

将WebService的URL配置在 Web.config文件中,便于管理和修改。

Web.config
<configuration><appSettings><add key="MyWebServiceUrl" value="http://localhost:12345/MyWebService.asmx" /></appSettings>
</configuration>
​
Default.aspx.cs
using System.Configuration;
using MyWebServiceRef;public partial class Default : System.Web.UI.Page
{protected void btnCallService_Click(object sender, EventArgs e){string serviceUrl = ConfigurationManager.AppSettings["MyWebServiceUrl"];MyWebServiceSoapClient client = new MyWebServiceSoapClient();client.Endpoint.Address = new System.ServiceModel.EndpointAddress(serviceUrl);string result = client.HelloWorld();lblResult.Text = result;}
}
​

4.2 使用数据契约

在WebService中使用数据契约(Data Contract)定义复杂类型,确保客户端和服务端之间的数据传输一致。

[DataContract]
public class MyData
{[DataMember]public int Id { get; set; }[DataMember]public string Name { get; set; }
}[WebMethod]
public MyData GetData(int id)
{return new MyData { Id = id, Name = "Example" };
}
​

五、总结

通过本文的介绍,您应能掌握在ASP.NET WebForms中调用ASMX WebService接口的基本方法,包括添加服务引用、同步和异步调用服务方法、错误处理和调试等。合理运用这些技术,可以提高应用程序的可靠性和用户体验。

http://www.xdnf.cn/news/10049.html

相关文章:

  • 职坐标精选嵌入式AI物联网开源项目
  • allWebPlugin中间件VLC专用版之截图功能介绍
  • svg的制作与动态效果的开发使用
  • 京东热点缓存探测系统JDhotkey架构剖析
  • 鸿蒙OSUniApp 移动端直播流播放实战:打造符合鸿蒙设计风格的播放器#三方框架 #Uniapp
  • AI入门示例
  • 深入解析AQS:Java并发核心框架
  • 宝塔部署 Vue + NestJS 全栈项目
  • 单片机寄存器的四种主要类型!
  • AWS Transit Gateway实战:构建DMZ隔离架构,实现可控的网络互通
  • 模块化设计,static和extern(面试题常见)
  • 2025.5.30工作总结
  • ubuntu20.04安装教程(图文详解)
  • LangChain-结合魔塔社区modelscope的embeddings实现搜索
  • Java八股文——Java基础「概念篇」
  • azure web app创建分步指南
  • 从虚拟化到云原生与Serverless
  • CSS 渐变完全指南:从基础概念到实战案例(线性渐变/径向渐变/重复渐变)
  • 异步并发控制代码详细分析
  • (c++)string的模拟实现
  • 【Office】Excel两列数据比较方法总结
  • 基于大模型预测的FicatIII-IV期股骨头坏死综合治疗研究报告
  • 多模态大语言模型arxiv论文略读(100)
  • LNMP环境中php7.2升级到php7.4
  • Android Native 之 adbd进程分析
  • 视频监控汇聚平台EasyCVR安防小知识:如何通过视频融合平台解决信息孤岛问题?
  • @Pushgateway 数据自动清理
  • 碰一碰发视频系统--基于H5场景开发
  • 选择if day5
  • QPS 和 TPS 详解