All posts by 龙生
SpringBoot——实现WebService接口服务端以及客户端开发
实现WebService接口的发布以及调用
一、服务端代码开发
1、pom依赖
2、接口类
3、接口实现类
4、webservice配置文件
2、客户端开发
(1)pom依赖
(2)封装客户端方法clientUtil
(3)调用接口类
(4)运行结果
C# netcore 开发WebService(Soap)
在NetCore时代开发WebService和FrameWork时代差别有一点儿大,毕竟NetCore是跨平台的一个框架,不过使用起来也得很简单,下面我就使用Visual Studio2019开发一个示例服务程序。你依然要注意我这个我写的这个demo是soap1.2。在开发前你必须清楚这一点,因为有很多时候SOAP1.1和SOAP1.2 并不通用。至于soap1.1我暂时不用netcore写示例了。 下面是开发详细过程: (1)创建新项目,选择ASP.NET Core Web应用程序 ,如下图 (2)配置新项目,为自己的项目起个名字,然后点击下一步,如下图 (3)进入模板选择页面,选择空,如下图 (4)项目建立好后需要我们通过NuGet引用开发依赖包 SoapCore,如下图一样添加引用。 (5)这时我们新一个类用于示例的返回和接受参数,类名StudentModel 代码如下:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
[DataContract] public class StudentModel { /// <summary> /// 学号 /// </summary> [DataMember] public string Sno { get; set; } /// <summary> /// 姓名 /// </summary> [DataMember] public string Name { get; set; } /// <summary> /// 班级 /// </summary> [DataMember] public string Grade { get; set; } /// <summary> /// 生日 /// </summary> [DataMember] public DateTime Birthday { get; set; } } |
(6)添加接口约束IContract,我们和framework下保持一致,实现两个方法,Get和Add代码如下:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[ServiceContract] public interface IContract { /// <summary> /// 查询学生信息 /// </summary> /// <param name="sno">学号</param> /// <returns>学生信息</returns> [OperationContract] StudentModel Get(string sno); /// <summary> /// 添加学生信息 /// </summary> /// <param name="student">学生信息</param> /// <returns>result</returns> [OperationContract] int Add(StudentModel student); } |
(7)添加服务实现类StudentService,来实现我们的约定服务接口。代码如下:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public class StudentService : IContract { public StudentModel Get(string sno) { return new StudentModel() { Sno = sno, Name = "小红", Grade = "202002", Birthday = new DateTime(2012, 8, 15) }; } /// <summary> /// 添加学生信息 /// </summary> /// <param name="student"></param> /// <returns></returns> public int Add(StudentModel student) { return 1; } } |
(8)在netcore中添加注入,这个想必不会陌生吧,现在netcore的注入已经很普遍了,修改 Startup.cs类中的ConfigureServices方法,添加代码如下:
|
1 |
services.TryAddSingleton<IContract, StudentService>(); |
(9)添加服务发布接口地址,修改Startup.cs类中的Configure方法,在最后修改UseEndpoints这一部分代码如下:
|
1 2 3 4 5 6 7 8 9 10 11 |
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseRouting(); app.UseSoapEndpoint<IContract>("/StudentService.asmx", new BasicHttpBinding(), SoapSerializer.XmlSerializer); } |
(10)点击Visual Studio2019上的运行按钮,此时便可以在浏览器里预览了。直接运行看到的页面是错误的地址,需要手动改一下地址如下:https://localhost:44376/StudentService.asmx,添加后半部分StudentService.asmx。我们便可以看到正常的返回了,如下图: 至此我们已经完成了一个简单的WebService,这个服务实现两个接口,一个Get 一个Add方法。 可以下载我示例源码百度网盘链接:https://pan.baidu.com/s/1wCXaGyThXTuS04aupJFsbg 查看提取码请先点击下方的捐赠按钮。 原创作品 相关文章:C# net framework 开发WebService(Soap) from:https://lebang2020.cn/details/210110njneqn2f.html
View Details关于C# webservices 返回的soap节点标签会包含方法名+result的修改
关于C# webservices 返回的soap节点标签会包含方法名+result的修改 有时候做项目的时候需要用到webservices与其他系统进行交互,但是当使用asp.net开发webservice的时候,webservices返回数据的xml节点标签会默认带 方法名+result 如下图: 这样的返回方式不利于客户端进行解析 我们可以在方法头添加属性: 这样返回的数据就会变化 from:https://blog.csdn.net/qq_40099189/article/details/107120068
View Details基于SpringBoot的javax.validation.Validation的参数校验方法
问题描述
当要对用户输入的参数进行校验时,可以用javax.validation.Validation包下的注解进行验证,实现简单,并且是基于JSR-303标准的。
微信小程序官方示例 官方weui-wxss下载于安装 详解
1.小程序示例源码:https://github.com/wechat-miniprogram/miniprogram-demo 2.微信 weui下载地址:https://github.com/weui/weui-wxss/ weui用微信开发者工具打开步骤。 新先小程序,目录选择dist。appid可以选择测试 对WEUI css详解 from:https://www.cnblogs.com/yxw699/p/10739542.html
View Detailsmysql表名忽略大小写问题记录
为了避免大小写引发的问题,一种推荐的命名规则是:在定义数据库、表、列的时候全部采用小写字母加下划线的方式,不使用任何大写字母。
在任何系统中可以使用lower_case_tables_name=1。使用该选项的不利之处是当使用SHOW TABLES或SHOW DATABASES时,看不出名字原来是用大写还是小写。
请注意在Unix中如果以前lower_case_tables_name = 0将lower_case_tables_name设置为1之前,重启mysqld之前,必须先将旧的数据库名和表名转换为小写。
Java嵌入式数据库H2学习总结(一)——H2数据库入门
一、H2数据库介绍
常用的开源数据库有:H2,Derby,HSQLDB,MySQL,PostgreSQL。其中H2和HSQLDB类似,十分适合作为嵌入式数据库使用,而其它的数据库大部分都需要安装独立的客户端和服务器端。
H2的优势:
1、h2采用纯Java编写,因此不受平台的限制。
2、h2只有一个jar文件,十分适合作为嵌入式数据库试用。
3、h2提供了一个十分方便的web控制台用于操作和管理数据库内容。
SpringBoot集成H2数据库
在写DAO层的单元测试时,我们往往会遇到一个问题,测试用例所依赖的数据库数据被修改或删除了,或者在一个新的环境下所依赖的数据库不存在,导致单元测试无法通过。在这种情况下,使用H2内存数据库来模拟数据库环境是一个很好的解决方案。
View Detailsnode.js反编译小程序.wxapk文件(自用)
一、node.js运行环境
|
1 |
安装node.js地址:nodejs.org/en/ |
二、下载反编译脚本
|
1 2 |
https<span class="token operator">:</span><span class="token operator">/</span><span class="token operator">/</span>pan<span class="token punctuation">.</span>baidu<span class="token punctuation">.</span>com<span class="token operator">/</span>s<span class="token operator">/</span><span class="token number">1</span>XE6fM4vSMbrYzyIgHV1J1w <a href="https://longsheng.org/wp-content/uploads/2022/04/wxappUnpacker-master.zip" rel="">wxappUnpacker-master</a> |
三、安装模拟器
|
1 2 |
下载夜神模拟器或其他android模拟器(推荐),下载微信,登录微信,打开你要编译的小程序,退回界面,点击文件管理器, |
image.png
|
1 2 |
文件在 <span class="token operator">/</span><span class="token keyword">data</span><span class="token operator">/</span><span class="token keyword">data</span><span class="token operator">/</span>com<span class="token punctuation">.</span>tencent<span class="token punctuation">.</span>mm<span class="token operator">/</span>MicroMsg<span class="token operator">/</span>一串<span class="token number">32</span>位的<span class="token number">16</span>进制字符串文件夹<span class="token operator">/</span>appbrand<span class="token operator">/</span>pkg<span class="token operator">/</span> 下<span class="token punctuation">,</span>根据时间找到源文件包压缩后,选中你要的小程序<span class="token punctuation">.</span>wxapkg文件, |
image.png
|
1 2 |
退回根目录,进入 /mnt/shared/Other/ ,把.wxapkg文件粘贴在这 |
image.png
|
1 2 |
然后打开电脑分享文件夹,然后把.wxapkg文件复制到你想放的地方 |
image.png image.png
|
1 2 3 4 5 6 7 8 9 |
然后win+R,输入cmd,回车,打开命令窗口,cd到编译脚本的目录,依次输入以下命令 npm install esprima npm install css-tree npm install cssbeautify npm install vm2 npm install uglify-es npm install js-beautify 安装好依赖之后,就是最后一步了,反编译 .wxapkg 文件 在当前目录下输入命令:node .\wuWxapkg.js F:\zyt_file\_-472979937_90.wxapkg(_-472979937_90.wxapkg是你需要反编译的源文件) |
|
1 2 3 4 |
如果出现 Cannot find module 'xxx' 表示模块未安装 运行命令 npm install 'xxx' , 安装依赖 如果遇到 __vd_version_info__ is not defined这种报错 解决方法如下: |
修改反编译脚本wuWxss.js代码,将原代码
|
1 2 3 4 5 6 7 8 9 |
function runVM(name,code){ let wxAppCode={},handle={cssFile:name}; let vm=new VM({sandbox:Object.assign(new GwxCfg(),{__wxAppCode__:wxAppCode,setCssToHead:cssRebuild.bind(handle)})}); vm.run(code); for(let name in wxAppCode)if(name.endsWith(".wxss")){ handle.cssFile=path.resolve(frameName,"..",name); wxAppCode[name](); } } |
修改为
|
1 2 3 4 5 6 7 8 9 10 11 |
function runVM(name,code){ let wxAppCode={},handle={cssFile:name}; let gg = new GwxCfg(); let tsandbox ={$gwx:GwxCfg.prototype["$gwx"],__mainPageFrameReady__:GwxCfg.prototype["$gwx"],__wxAppCode__:wxAppCode,setCssToHead:cssRebuild.bind(handle)}; let vm = new VM({sandbox:tsandbox}); vm.run(code); for(let name in wxAppCode)if(name.endsWith(".wxss")){ handle.cssFile=path.resolve(frameName,"..",name); wxAppCode[name](); } } |
或者修改这个,将原代码
|
1 2 3 |
function runOnce(){ for(let name in runList)runVM(name,runList[name]); } |
修改为
|
1 2 3 4 5 6 7 8 9 10 11 12 |
function runOnce() { for (let name in runList) { // console.log(name, runList[name]); var start = `var window = window || {}; var __pageFrameStartTime__ = Date.now(); var __webviewId__; var __wxAppCode__={}; var __mainPageFrameReady__ = function(){}; var __WXML_GLOBAL__={entrys:{},defines:{},modules:{},ops:[],wxs_nf_init:undefined,total_ops:0}; var __vd_version_info__=__vd_version_info__||{}; $gwx=function(path,global){ if(typeof global === 'undefined') global={};if(typeof __WXML_GLOBAL__ === 'undefined') {__WXML_GLOBAL__={}; }__WXML_GLOBAL__.modules = __WXML_GLOBAL__.modules || {}; }`; runVM(name, start + " \r\n" + runList[name]); } } |
参考地址
|
1 2 3 4 |
反编译流程参考地址: [https://baijiahao.baidu.com/s?id=1626150833428399320&wfr=spider&for=pc](https://baijiahao.baidu.com/s?id=1626150833428399320&wfr=spider&for=pc) __vd_version_info__ is not defined错误解决方法参考地址: [https://blog.csdn.net/weixin_43764814/article/details/91135302](https://blog.csdn.net/weixin_43764814/article/details/91135302) |
作者:好可怕好可怕 链接:https://www.jianshu.com/p/a47e36f70e35 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
View Details