Web Services 服务 是不是过时了?创建 Web Services 服务实例
Web Services 是不是过时了?
今天是兔年最后一天,先给大家拜个早年 。
昨天上午视频面试一家公司需要开发Web Services 服务,这个也没有什么,但还需要用 VB.net 开发。这个是多古老的语言了,让我想起来了 10年 前 写 VBA 的时候,那就写了一个玩玩?
文章目录
- Web Services 是不是过时了?
- 前言
- 一、准备工作
- 二、基本配置步骤
- 1.选择 web 服务 asmx 服务
- 2.引用 mysql package
- 3.web.config 文件加入数据库connectionString
- 4.然后写一个 select 的方法
- 5.方法改造 XML序列化
- 6.写一个带参数的
- 7.写一个 Insert的方法
- 8.最后疑问?Web Services 和Web API 那个运用的更广泛呢?
- 总结
前言
网上百度了下:基础知识大家了解下 :
选择使用 Web Services 还是 Web API 取决于您的具体需求和技术栈。这两者都是用于实现分布式系统和服务的技术,但它们有一些区别。
Web Services:
SOAP (Simple Object Access Protocol): Web Services 常基于 SOAP 协议,这是一种使用 XML 格式进行通信的协议。
协议和标准: Web Services 通常严格遵循一系列协议和标准,如 WSDL (Web Services Description Language) 用于描述服务,UDDI (Universal Description, Discovery, and Integration) 用于服务的发现。
跨语言性: 由于使用了标准化的协议和格式,Web Services 可以在不同平台和语言之间进行通信。
Web API:
RESTful (Representational State Transfer): Web API 常基于 RESTful 架构,使用 JSON 或 XML 进行数据传输。
轻量级: 相对于 Web Services,Web API 更轻量级,通常使用 HTTP 协议进行通信,不像 Web Services 那样依赖较多的协议和标准。
更简单: Web API 更简单易用,通常适合构建基于 HTTP 的轻量级服务,特别是在移动应用和单页应用中。
一、准备工作
上午查了一些资料
需要安装 mysql 数据库 8.0
需要安装 Microsoft Visual Studio Professional 2022 + vb.net
需要安装 IIS 服务
需要安装 mysql-connector-net-8.3.0 库
自己的 系统是 windows 10
好了基本就些就是开发环境了
二、基本配置步骤
1.选择 web 服务 asmx 服务
2.引用 mysql package
下载地址 https://dev.mysql.com/downloads/connector/net/
需要先安装 mysql 驱动
然后选择 dll 应用
最后 本code 使用是网上的 classicmodels 数据库
可以去下载 classicmodels 数据库具体如下
点击:classicmodels
也可以去 下面我的博客资源下载
https://download.csdn.net/download/tomxjc/88685970
用的是 MySQL 8.0
3.web.config 文件加入数据库connectionString
主要就是加入 这段
<?xml version="1.0" encoding="utf-8"?>
<!--有关如何配置 ASP.NET 应用程序的详细信息,请访问https://go.microsoft.com/fwlink/?LinkId=169433
-->
<configuration><connectionStrings><add name="MySqlConnection"connectionString="Server=localhost;Database=classicmodels;User Id=root;Password=123456;"providerName="MySql.Data.MySqlClient" /></connectionStrings><system.web><compilation debug="true" strict="false" explicit="true" targetFramework="4.7.2" /><httpRuntime targetFramework="4.7.2" /></system.web><system.codedom><compilers><compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701" /><compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+" /></compilers></system.codedom>
</configuration>
在 vb 中调用的语法是
Public connectionString As String = ConfigurationManager.ConnectionStrings("MySqlConnection").ConnectionString
4.然后写一个 select 的方法
<WebMethod()>Public Function QueryDatabase() As StringDim result As String = ""TryUsing connection As New MySqlConnection(connectionString)connection.Open()' Specify your MySQL queryDim query As String = "SELECT * FROM Products where ='Classic Cars'"' Execute the queryUsing command As New MySqlCommand(query, connection)Using reader As MySqlDataReader = command.ExecuteReader()Dim xmlResult As New XmlDocument()' Create the root elementDim rootElement As XmlElement = xmlResult.CreateElement("Data")xmlResult.AppendChild(rootElement)While reader.Read()' Create individual data elementsDim dataElement As XmlElement = xmlResult.CreateElement("Item")Dim idElement As XmlElement = xmlResult.CreateElement("productCode")idElement.InnerText = reader("productCode").ToString()dataElement.AppendChild(idElement)Dim nameElement As XmlElement = xmlResult.CreateElement("productName")nameElement.InnerText = reader("productName").ToString()dataElement.AppendChild(nameElement)Dim lineElement As XmlElement = xmlResult.CreateElement("productline")lineElement.InnerText = reader("productline").ToString()dataElement.AppendChild(lineElement)Dim descElement As XmlElement = xmlResult.CreateElement("productDescription")descElement.InnerText = reader("productDescription").ToString()dataElement.AppendChild(descElement)rootElement.AppendChild(dataElement)End Whileresult = xmlResult.OuterXmlEnd UsingEnd UsingEnd UsingCatch ex As Exception' Handle exceptionsresult = $"<Error>{ex.Message}</Error>"End TryReturn resultEnd Function
验证数据
结果返回是这样,返回是 字符类型,不是应该自动识别的吗?看来是没有XML序列化
5.方法改造 XML序列化
<WebMethod()>Public Function QueryDatabaseXmlSerializer() As XmlDocument'这个表代码XML序列化 并返回 XmlDocument 类型Dim xmlDoc As New XmlDocument()TryUsing connection As New MySqlConnection(connectionString)connection.Open()' Specify your MySQL queryDim query As String = "SELECT * FROM Products WHERE productline = 'Classic Cars'"' Execute the queryUsing command As New MySqlCommand(query, connection)Using reader As MySqlDataReader = command.ExecuteReader()Dim items As New List(Of Products)()While reader.Read()' Create instances of the Item class and populate themDim item As New Products() With {.productCode = reader("productCode").ToString(),.productName = reader("productName").ToString(),.productline = reader("productline").ToString(),.productDescription = reader("productDescription").ToString()}items.Add(item)End While' Serialize the list of items to XMLDim serializer As New XmlSerializer(GetType(List(Of Products)))Using writer As XmlWriter = xmlDoc.CreateNavigator().AppendChild()serializer.Serialize(writer, items)End UsingEnd UsingEnd UsingEnd UsingReturn xmlDocCatch ex As Exception' Handle exceptionsDim errorDoc As New XmlDocument()errorDoc.LoadXml($"<Error>{ex.Message}</Error>")Return errorDocEnd TryEnd Function
在加入一个类
Public Class ProductsPublic Property productCode As StringPublic Property productName As StringPublic Property productDescription As StringPublic Property productline As String
End Class
再验证一下
6.写一个带参数的
<WebMethod()>
Public Function QueryProductByCodeXmlSerializer(productCode As String) As XmlDocumentDim xmlDoc As New XmlDocument()TryUsing connection As New MySqlConnection(connectionString)connection.Open()' Specify your MySQL query with a parameterDim query As String = "SELECT * FROM Products WHERE productCode = @ProductCode"' Execute the queryUsing command As New MySqlCommand(query, connection)' Add the parameter to the commandcommand.Parameters.AddWithValue("@ProductCode", productCode)Using reader As MySqlDataReader = command.ExecuteReader()Dim items As New List(Of Products)()While reader.Read()' Create instances of the Products class and populate themDim item As New Products() With {.productCode = reader("productCode").ToString(),.productName = reader("productName").ToString(),.productline = reader("productline").ToString(),.productDescription = reader("productDescription").ToString()}items.Add(item)End While' Serialize the list of items to XMLDim serializer As New XmlSerializer(GetType(List(Of Products)))Using writer As XmlWriter = xmlDoc.CreateNavigator().AppendChild()serializer.Serialize(writer, items)End UsingEnd UsingEnd UsingEnd UsingReturn xmlDocCatch ex As Exception' Handle exceptionsDim errorDoc As New XmlDocument()errorDoc.LoadXml($"<Error>{ex.Message}</Error>")Return errorDocEnd Try
End Function
验证数据
显示
7.写一个 Insert的方法
mysql 建表
CREATE TABLE `china_city` (`citycode` varchar(10) NOT NULL,`city` varchar(50) NOT NULL,PRIMARY KEY (`citycode`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
代码先写了 类
Public Class ChinaCityPublic Property CityCode As StringPublic Property City As String
End Class
<WebMethod()>
Public Function InsertCity(cityCode As String, cityName As String) As XmlDocumentDim errorDoc, successfulDoc As New XmlDocument()TryUsing connection As New MySqlConnection(connectionString)connection.Open()' Specify your MySQL insert queryDim query As String = "INSERT INTO china_city (citycode, city) VALUES (@CityCode, @CityName)"' Execute the insert queryUsing command As New MySqlCommand(query, connection)' Add parameters to the commandcommand.Parameters.AddWithValue("@CityCode", cityCode)command.Parameters.AddWithValue("@CityName", cityName)' Execute the insert queryDim rowsAffected As Integer = command.ExecuteNonQuery()' Check if the insertion was successfulIf rowsAffected > 0 ThensuccessfulDoc.LoadXml($"<Result>Insertion successful</Result>")Return successfulDocElseerrorDoc.LoadXml($"<Error>No rows inserted</Error>")Return errorDocEnd IfEnd UsingEnd UsingCatch ex As Exception' Handle exceptionserrorDoc.LoadXml($"<Error>{ex.Message}</Error>")Return errorDocEnd Try
End Function
验证数据
8.最后疑问?Web Services 和Web API 那个运用的更广泛呢?
chatGPT 给出了答案
总结
以上源码下载如下https://download.csdn.net/download/tomxjc/88822612
好了,今天就介绍到这里。希望大家喜欢, 一键三连 ,福星高照
相关文章:

Web Services 服务 是不是过时了?创建 Web Services 服务实例
Web Services 是不是过时了? 今天是兔年最后一天,先给大家拜个早年 。 昨天上午视频面试一家公司需要开发Web Services 服务,这个也没有什么,但还需要用 VB.net 开发。这个是多古老的语言了,让我想起来了 10年 前 写 …...
redis单线程还快的原因
1. 内存存储和高效数据结构: 内存存储: Redis将数据存储在内存中,因此可以实现非常高的读写速度,而无需频繁的磁盘I/O操作。 高效数据结构: Redis内置了丰富且高效的数据结构,如字符串、哈希表、列表、集合…...

【flutter】报错 cmdline-tools component is missing
在flutterSDK目录下,双击flutter_console.bat,调出命令行。 输入flutter doctor,如果第三个诊断为[x],报cmdline-tools component is missing错(我这已经修改好了,所以是勾了),那就可…...

以用户为中心,酷开科技荣获“消费者服务之星”
在企业顺应消费升级的道路中,企业自身不仅要着力强化对于消费者服务意识的提升,并且要树立诚信自律的行业示范带头作用,助力消费环境稳中向好,不断满足人民群众对美好生活的期待。企业的发展需要消费者的认可,酷开科技…...

Days 27 ElfBoard 板 AltiumDesigner 相同电路快速布局布线
在进行设计开发的时候,总会遇到相同的电路,或者模块,这些电路可以使用相同的布局和走线,例如 DC-DC 电源、网口 PHY 电路部分。这类型的电路,我们可以采用AltiumDesigner 中的 Room 进行布局和布线的快速复制ÿ…...

除夕快乐(前端小烟花)
家人们,新的一年好运常在,愿大家在新的一年里得偿所愿,发财暴富,愿大家找到属于自己的那个公主,下面就给大家展示一下给公主的烟花 前端烟花 新的一年,新的挑战,愿我们不忘初心,砥砺…...

fast.ai 深度学习笔记(二)
深度学习 2:第 1 部分第 4 课 原文:medium.com/hiromi_suenaga/deep-learning-2-part-1-lesson-4-2048a26d58aa 译者:飞龙 协议:CC BY-NC-SA 4.0 来自 fast.ai 课程的个人笔记。随着我继续复习课程以“真正”理解它,这…...
风行智能电视G32Y 强制刷机升级方法,附刷机升级数据MstarUpgrade.bin
升级步骤: 1、下载刷机数据,如是压缩包,需要先解压,然后将刷机bin格式的文件重命名为MstarUpgrade.bin 2、将此文件放到U盘根目录 (U盘格式FAT32,单分区,建议4G的优盘刷机成功率高)…...
tsgctf-2021-lkgit-无锁竞争-userfaultfd
启动脚本 qemu-system-x86_64 \-kernel ./bzImage \-initrd ./rootfs.cpio \-nographic \-monitor /dev/null \-cpu kvm64,smep,smap \-append "consolettyS0 kaslr oopspanic panic1 quiet" \-no-reboot \-m 256M题目 lkgit_hash_object #define HASH_SIZE …...

物联网数据隐私保护技术
在物联网(IoT)的世界中,无数的设备通过互联网连接在一起,不断地收集、传输和处理数据。这些数据有助于提高生产效率、优化用户体验并创造新的服务模式。然而,随着数据量的剧增,数据隐私保护成为了一个不能忽…...

RabbitMQ-1.介绍与安装
介绍与安装 1.RabbitMQ1.0.技术选型1.1.安装1.2.收发消息1.2.1.交换机1.2.2.队列1.2.3.绑定关系1.2.4.发送消息 1.2.数据隔离1.2.1.用户管理1.2.3.virtual host 1.RabbitMQ 1.0.技术选型 消息Broker,目前常见的实现方案就是消息队列(MessageQueue&…...

CSS高级技巧
一、 精灵图 1.1 为什么需要精灵图? 1.2 精灵图(sprites)的使用 二、 字体图标 2.1 字体图标的产生 2.2 字体图标的优点 2.3 字体图标的下载 icomoom字库 http://icomoon.io 阿里iconfont字库 http://www.iconfont.cn/ 2.4 字体图标的引用…...

Redis的数据类型Hash使用场景实战
Redis的数据类型Hash使用场景 常见面试题:redis在你们项目中是怎么用的,除了String数据类型还使用什么数据类型? 怎么保证缓存和数据一致性等问题… Hash模型使用场景 知识回顾: redisTemplate.opsForHash() 方法是 Redis 的 …...

HttpClient | 支持 HTTP 协议的客户端编程工具包
目录 1、简介 2、应用场景 3、导入 4、API 5、示例 5.1、GET请求 5.2、POST请求 🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发、数据结构和算法,初…...
DP第一天:力扣● 理论基础 ● 509. 斐波那契数 ● 70. 爬楼梯 ● 746. 使用最小花费爬楼梯
● 理论基础 DP大约五种问题: 动规基础(斐波那契数列、爬楼梯);背包问题;股票问题;打家劫舍;子序列问题。 要搞清楚: DP数组及其下标的含义;DP数组如何初始化&#x…...

Android Studio 安装Flutter插件但是没法创建项目
Android Studio 安装Flutter插件但是没法创建项目 如果你在Android Studio已经安装了Dart、Flutter插件,但是不能创建Flutter项目。 原因是因为Android Studio的版本更新,Android APK Support这个插件没被选中。 一旦勾选这个插件之后,就能…...

新春快乐(烟花、春联)【附源码】
新春快乐 一: C语言 -- 烟花二:Python -- 春联三:Python -- 烟花四:HTML -- 烟花 一: C语言 – 烟花 运行效果: #include <graphics.h> #include <math.h> #include <time.h> #include…...
nextcloud 优化扩展
cd /config vi config.php #ONLYOFFICE allow_local_remote_servers > true, #应用商店加速 appstoreenabled > true, appstoreurl > https://www.orcy.net/ncapps/v2/, #nginx配置调优 add_header Strict-Transport-Security max-age15552000; add…...

【CSS】css如何实现字体大小小于12px?
【CSS】css如何实现字体大小小于12px? 问题解决方案transform: scale(0.5)(常用)SVG 矢量图设置text 问题 文字需要显示为12px,但是小于12px的,浏览器是显示不来的 解决方案 transform: scale(0.5)(常用࿰…...

【Langchain+Streamlit】旅游聊天机器人
【LangchainStreamlit】打造一个旅游问答AI-CSDN博客 项目线上地址,无需openai秘钥可直接体验:http://101.33.225.241:8502/ github地址:GitHub - jerry1900/langchain_chatbot: langchainstreamlit打造的一个有memory的旅游聊天机器人&…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
React从基础入门到高级实战:React 实战项目 - 项目五:微前端与模块化架构
React 实战项目:微前端与模块化架构 欢迎来到 React 开发教程专栏 的第 30 篇!在前 29 篇文章中,我们从 React 的基础概念逐步深入到高级技巧,涵盖了组件设计、状态管理、路由配置、性能优化和企业级应用等核心内容。这一次&…...

小智AI+MCP
什么是小智AI和MCP 如果还不清楚的先看往期文章 手搓小智AI聊天机器人 MCP 深度解析:AI 的USB接口 如何使用小智MCP 1.刷支持mcp的小智固件 2.下载官方MCP的示例代码 Github:https://github.com/78/mcp-calculator 安这个步骤执行 其中MCP_ENDPOI…...

Win系统权限提升篇UAC绕过DLL劫持未引号路径可控服务全检项目
应用场景: 1、常规某个机器被钓鱼后门攻击后,我们需要做更高权限操作或权限维持等。 2、内网域中某个机器被钓鱼后门攻击后,我们需要对后续内网域做安全测试。 #Win10&11-BypassUAC自动提权-MSF&UACME 为了远程执行目标的exe或者b…...

Copilot for Xcode (iOS的 AI辅助编程)
Copilot for Xcode 简介Copilot下载与安装 体验环境要求下载最新的安装包安装登录系统权限设置 AI辅助编程生成注释代码补全简单需求代码生成辅助编程行间代码生成注释联想 代码生成 总结 简介 尝试使用了Copilot,它能根据上下文补全代码,快速生成常用…...
Python爬虫(四):PyQuery 框架
PyQuery 框架详解与对比 BeautifulSoup 第一部分:PyQuery 框架介绍 1. PyQuery 是什么? PyQuery 是一个 Python 的 HTML/XML 解析库,它采用了 jQuery 的语法风格,让开发者能够用类似前端 jQuery 的方式处理文档解析。它的核心特…...
Ansible+Zabbix-agent2快速实现对多主机监控
ansible Ansible 是一款开源的自动化工具,用于配置管理(Configuration Management)、应用部署(Application Deployment)、任务自动化(Task Automation)和编排(Orchestration…...
Spring Boot SQL数据库功能详解
Spring Boot自动配置与数据源管理 数据源自动配置机制 当在Spring Boot项目中添加数据库驱动依赖(如org.postgresql:postgresql)后,应用启动时自动配置系统会尝试创建DataSource实现。开发者只需提供基础连接信息: 数据库URL格…...