与 .NET 联调的那些事

这篇文章本来是想要写写最近用到的技术,但是回想起来,这几天主要的工作还是与 PC 端的联调,已经修改项目中的 bug。因此,就决定先不写技术方面的东西了。把我这几天与 .NET 联调的那些事说说吧,感觉也挺有意思的。

背景

在问题讨论之前,首先要把背景介绍清楚,这才是最重要的。PC 端的登录、验证都是走的服务器的 WebService,当然这个是很常见的,一般的也都是这么做的。只要是 PC 端涉及到读数据、写数据的都是需要通过 WebService 调服务器的。而 PC 端的操作有很多,也包括前一段时间写过的证书,PC 端需要获取证书也是需要请求服务器的。所以,在给 PC 端提供接口之后,就需要服务端与
PC 端一同进行联调。

正文

之所以要单独提出来写联调的事,是因为在联调过程中,Java 与 .NET 的交互出了些许问题,起初的问题让人感觉很扯,各自都有自己的一套实现,对接起来似乎并不怎么容易。不过后来我才发现,其实只要找对了方法,选择统一的标准,就算是各自的实现不同也没有关系,照样可以“沟通”。

就拿证书来说吧,前一段时间刚做了一个服务器生成 CA 证书的功能,然后这个证书是给 PC 端提供了,PC 端在注册用户时请求生成证书,成功之后,会把包含有公钥的证书传送给 PC 端进行保存。当然,这之间还有一些认证的机制,确保 PC 端访问的是真正的服务器。之后,PC 端的操作都会依据证书,通过使用证书中的公钥,对数据进行公钥加密,在传输过程中,就算是数据被截获之后,没有服务器发布的证书的私钥是无法解开数据的,这就保证了数据的安全传输。

上面说的只是一个大体的流程,下面说一下问题出在哪里,这会涉及到一些加密算法的使用,当然,这里就不讨论算法了。只是说一点,Java 服务端在对字符串进行加密的时候,发现加密的长度是有限制的,只能采用分片加密,这一点在前边也提过了。考虑到统一的标准,于是 Java 与 .NET 一同进行分片加解密,而不是只有一段进行分片。

由于在传输过程中,采用的是 Base64 的编码方式,在转换编码的时候,Java 服务端把 Base64 编码的数据传给 .NET 之后(这里是 C#),C# 采用同样的解码方式得到的数据竟然是乱码。这在试了很多次之后都是同样的结果。按说标准是统一的,虽然各自的实现方式不同,但是在交互上应该是相同的啊,同样的标准编码之后,采用一样的标准应该是可以解码的。想到可能是在之前的编码有问题,于是就把之前的编码都统一为
UTF-8 了,可恨的是,竟然还是乱码,这真的很没道理。在检查了我的代码之后,我并没有发现什么问题,后来通过查资料,也得知 Base64 编码在 Java 与 .NET 之间是可以互通的。那么问题肯定就出在了代码上。

由于之前我也学过 .NET,于是我开始过去跟 PC 端的人员沟通,了解他那边的实现流程,忽然我注意到,他在发送数据的时候,做了两次 Base64 编码,而我在服务端只是进行了一次解码,那么可想而知,解出来的数据肯定是乱码啊。通过协商,统一采用一次编码,一次解码。再次测试之后,才没有了问题。

结束语

这仅仅是其中的一个小问题,也是一个比较典型的问题。不仅仅是 Java 与 .NET,两种语言在交互的同时,一定要选择好适合的标准,选择两种语言之间共有的,在交互上才不会出什么问题。否则,标准不统一,实现不统一,那么交互起来有你头疼的。

时间: 2024-11-09 01:12:17

与 .NET 联调的那些事的相关文章

iOS 证书那些事

关于开发证书配置(Certificates & Identifiers & Provisioning Profiles),相信做iOS开发的同学没少被折腾.对于一个iOS开发小白.半吊子(比如像我自己)抑或老兵,或多或少会有或曾有过以下不详.疑问.疑惑甚至困惑: 什么是App ID?Explicit/Wildcard App ID有何区别?什么是App Group ID? 什么是证书(Certificate)?如何申请?有啥用? 什么是Key Pair(公钥/私钥)?有啥用?与证书有何关联

关于打码的一些事

1.今晚打代码算是遇到好多问题了,但是谷歌,stackoverflow,谷歌翻译,一点点都解决了,问别人也没回,所以说还是靠自己,记得更久一些,自己栽过的坑,印象会更深刻. 2.静下心来做一件事,很多事情没想象的那么难的. 3.喜欢这种学习后的充实感,不会像打完游戏或者看完视频一样迷茫. 4.继续加油吧. 5.原来右键网页图片可以get到url.

10682 deathgod想知道的事(数论)

10682 deathgod想知道的事 该题有题解 时间限制:1000MS  内存限制:65535K提交次数:265 通过次数:14 题型: 编程题   语言: G++;GCC Description 一只蚂蚁从衣服地图上爬过留下痕迹,deathgod看到后在地图上建了个坐标,将蚂蚁留下的痕迹分成多条线段首位相连而成, 且那些线段的端点都是整数点,现在他想知道这只蚂蚁经过了坐标中多少个整数点. 输入格式 第一行输入一个整数t,表示case数:对于每个case,第一行输入一个整数n(0<=n<=

转 离婚前夜悟出的三件事

文/铁眼(简书作者)原文链接:http://www.jianshu.com/p/832be4f659a0?utm_campaign=hugo&utm_medium=reader_share&utm_content=note著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 前两天,在一次吃饭的时候,感觉嘴里有异样,用牙签一挑,一颗智齿酥了,脱落下来.当时很惊恐,自己才30多点,牙齿就坏了,那时只有后悔的想法,如果再往回调两年时间,我一定好好认真的刷牙,保养好牙齿. 牙齿如此坚固

专业房产经纪人必须知道的九件事

1 顾客说的话不全信 顾客是上帝,但是上帝从来不会把自己的心交给他的下人.80%的顾客因为对你抱有戒心,所以他是不会把自己的真实承受价格告诉你的,当然这种留有余地的做法是人之常情.你要做的不过是告诉顾客你是多么的专业就可以了,你要让顾客相信你,这样,你的工作才能完成. 2 永远不要对顾客说没有 永远不要对顾客说没有,即便顾客的要求非常无理.我们接到一个电话,可能是形形***的,有细心询问,有侃侃而谈,我们怎么在一个电话间去判断这个顾客?如果判断对了,顾客对你的信任度就会加强,接下来一切工作都好办

[java学习笔记]Hello World那些事

我们安装和配置好java后,必须得大展拳脚一番,根据国际惯例,第一个程序必须是Hello World,下面我们就看看Hello World的那些事. 1.Hello World的运行 Hello World流程: 将java代码编写到.java后缀的文件中保存. 通过javac编译命令对该.java文件进行编译(编译后产生.class文件). 通过Java命令运行产生的,class文件. 流程图:   F:\Demo.java文件内容: public class Demo{ public sta

做正确的事,不做容易的事

原文<李想:"做正确的事,不做容易的事"> 本文是我(李想)在去经纬投资和他们聊天的时候,速记员帮助我把聊天的内容记录了下来的整理.因为内容量很大,所以速记会有一些记录错误的地方.我想了一下,还是使用原文重新整理了一遍,把里面的错字和错误的数据进行了修改,从而避免对阅读者的误导. 不过,仍然感谢经纬和速记的帮助,这确实是我过去十几年创业最实实在在的记录. 我也开通了长微博打赏的功能,各位大爷看的好,赏几个零花钱! 李想,汽车之家网站创始人,前任汽车之家总裁.李想是80后的典

开发人员转型到管理者必须学会的7件事

技术工程师的晋升之路 技术工程师的晋升之路大体上可以分为两个方向,一是在技术方向上作为Individual Contributor(IC)继续深造,二是以管理者的身份管理工程师团队.IC这条路比较单纯,能走多远主要取决于个人的技术实力与经验.与IC相比,转型为管理者可以说是一种颠覆性的变化.管理者的工作不再是以个人或项目的成功作为主要目标,而是专注于整个团队的成功.这种目标的变化将直接改变管理者的心态与工作方式,以及与他人的互动方式.可以说,向管理者的转型是一个具有更大挑战性的选择. David

想提升工作效率,就別再做这七件事

试想一位小公司老板每日孜孜不倦地工作,为何不能从为数众多的竞争者脱颖而出? 一位创业家可以不眠不休一天工作24 小时,整整一周不休假. 然而,时间有限,且竞争者却永远可以投入更多钱与心力,让竞争更剧烈.那么,为什么某些小型新创公司可以完成许多大型企业无法完成的事情呢? ●Instagram──只有13 名员工却被Facebook 用几十亿买下的公司. ●Snapchat──只有30 名员工却拒绝科技巨人Facebook.Google 的并购交易. 它们的成功部分来自于幸运──其余则是因为效率 .