C# 调用Java接口

最近工作任务中包含了系统之间数据的互通,当然就考虑系统互相开通接口来实现通信了!

作为.NET的开发者,还没有调用过Java接口的经历,惭愧惭愧!

话不多说,直接进入正题!

调用webservice接口,.NET最快的方法是什么?

1,当然是添加服务引用了!

填上WSDL地址,代码中new一个xxxxClient对象,找到方法,传入参数,得到结果,very easy!

2,用SvcUtil生成代理类,在Visual Studio工具中找到它!

什么?你找不到?那你去别处找找如何添加它吧,嘿嘿!

同样,输入wsdl地址:

会帮你在你默认设置的路径里生成一个代理类和一个config文件,类名,配置都帮你生成好了!放入你的项目代码中,爽起来!

But,最吓人的“但是”来了!

以上两种方法调用Java的webservice有个严重的问题解决不了!就是方法不支持重载!比如一个Login方法,人家写了三个不同参数的,不好意思,.NET的工具区分不了!也调不通这个方法。到这里我只能说有句MMP当讲不当讲!

B....But难道就不能调用了么!那肯定是不可能的嘛!上网找文章,我擦,到处都是写一堆一堆的,烦不烦!我要用HttpWebRequest,在互联网时代,我们也要跟上时间的步伐,干啥我都用互联网的思维!哈哈!

1,上工具!

2,点SOAP

3,名称随便写,wsdl不用多少了吧!填上!

4,看到了吗?这么多Login!mmp!双击这个request1

得到这个

5,看看是不是提供给你的那些参数,如果是,那么恭喜你,你找对了!

6,填上参数,调一把!嘿,还通了!注意右侧!

7,重点来了!点下面的HTTPLOG!哇塞,Header 和发送的报文全有啦!

8,这玩意儿搞得也太难看了,我要用我的FIDDLER 来模拟它!上工具!

9,找到这个选项卡!

10,按上图从SoapUI,那边把地址,POST/GET,Header,RequestBody全都copy过来!点击EXECUTE,看左边框框,返回200,yes,通了!

11,选中此请求,看右边的Inspectors 一目了然啊!

12,好了,做了这么多工作,干啥呢干啥呢,直接上代码行吗?好好好,来了来了!

我们先打包好HttpWebRequest的header

StringBuilder sb = new StringBuilder();
sb.AppendLine("<soapenv:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:log=\"http://login.webservice.bos.kingdee.com\">");
sb.AppendLine("<soapenv:Header/>");
sb.AppendLine("<soapenv:Body>");
sb.AppendLine("<log:login soapenv:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">");
sb.AppendLine("<userName xsi:type=\"xsd: string\">mes</userName>");
sb.AppendLine("<password xsi:type=\"xsd: string\">mes</password>");
sb.AppendLine("<slnName xsi:type=\"xsd: string\">eas</slnName>");
sb.AppendLine("<dcName xsi:type=\"xsd: string\">eas20170605</dcName>");
sb.AppendLine("<language xsi:type=\"xsd: string\">L2</language>");
sb.AppendLine("<dbType xsi:type=\"xsd: int\">2</dbType>");
sb.AppendLine("</log:login>");
sb.AppendLine("</soapenv:Body>");
sb.AppendLine("</soapenv:Envelope>");

       

HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
            Encoding encoding = Encoding.UTF8;
            byte[] bs = Encoding.ASCII.GetBytes(sb.ToString());
            string responseData = String.Empty;
            req.Method = "POST";
            req.ContentType = "text/xml;charset=UTF-8";
            req.ContentLength = bs.Length;
            req.UserAgent = "Apache-HttpClient/4.1.1(java 1.5)";
            req.Headers.Add("Accept-Encoding", "gzip,deflate");
            req.Headers.Add("SOAPAction", "");

            CookieContainer CookiesContainer = null;
            if (CookiesContainer == null)
            {
                CookiesContainer = new CookieContainer();
            }

            //req.CookieContainer = CookiesContainer;  //启用cookie

再传送RequestBody

using (Stream reqStream = req.GetRequestStream())
{
        reqStream.Write(bs, 0, bs.Length);
        reqStream.Close();
}

然后发送请求,得到结果!

using (HttpWebResponse response = (HttpWebResponse)req.GetResponse())
            {
                using (StreamReader reader = new StreamReader(response.GetResponseStream(), encoding))
                {
                    responseData = reader.ReadToEnd().ToString();
                }
            }
            return responseData;

OK,结果如何去分析,我就不用多讲了吧,xml的有xml的工具类,json有json的工具类,C#,强无敌!

时间: 2024-10-12 11:15:18

C# 调用Java接口的相关文章

C#调用JAVA接口WSSE方式用WebClient方式

C#读取JAVA的WSSE接口的调用代码: 用webclient 方式: /// <summary> /// 调用java cxf ws_security加密的服务wcf客户端对应的加密类 /// </summary> public class WssSecurity { private byte[] _nonce ; private string _nonceStr = GetNoce(29); private readonly string _pass; //密码 privat

android NDK 实用学习(五)-c++端调用java接口

1,阅读此文章前请阅读前面文章,以免阅读出现障碍: android NDK 实用学习(一)-获取java端类及其类变量 android NDK 实用学习(二)-java端对象成员赋值和获取对象成员值 android NDK 实用学习(三)- java端类对象的构造及使用 android NDK 实用学习(四)-类缓存 2,java端类接口定义: 1 public class RTKNativeManager { 2 // 其他接口 3 4 // 开给c++端的接口 5 public static

对接第三方平台JAVA接口问题推送和解决

前言 本节所讲为实际项目中与第三方对接出现的问题最后还是靠老大解决了问题以此作为备忘录,本篇分为三小节,一小节解析Java加密接口数据,二小节解析XML文件需注意问题,最后一节则是请求Java Soap协议接口.因为第三方平台都是采用JAVA语言,所以这种情况应该对大家有所帮助. DES加密/解密Java接口 关于Java中序列化为XML文件就不搞了,我们首先需要讲解的是关于加密问题,由于是第三方是采用的DES加密,所以我们只讲解DES,有很多人可能有疑问了,这不过时了么且不安全,不必纠结,这个

.Net下实现配置化调用JAVA开发的WebService

各个系统之间进行数据交互是重要的部分,WebService是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,使用较为方便,闲话少说,正式进入到关于在.Net中调用java开发的接口. 目前JAVA开发WebService的方式很很多种:Axis2.CXF.xfire等等,但是在.Net中调用这些接口无法实现配置IP的形式进行替换调用服务,那这个问题该如何解决? 笔者测试发现相同框架开发的接口是可以进行配置URL来改变调用接口,前提是需要对JAVA基于不同框架的接口进行引用,在V

Java调用WebService 接口 实例

这里给大家介绍一下,Java调用webservice的一个实例的过程. 本项目不能运行,因为接口地址不可用. 这里只是给大家介绍一个过程,同时留作自己的笔记.如果要学习,可以参照别人的实例.比较好. ①选择项目根目录的src ,右键,new --> webservice client 然后输入地址: http://172.18.100.52:456/hello?wsdl 必须要加wsdl结尾,这样才是一个webservice的接口. finlish.这时候刷新项目.可以看到项目下/src/com

java接口调用——webservice就是一个RPC而已

很多新手一听到接口就蒙逼,不知道接口是什么!其实接口就是RPC,通过远程访问别的程序提供的方法,然后获得该方法执行的接口,而不需要在本地执行该方法.就是本地方法调用的升级版而已,我明天会上一篇如何通过socket实现rpc,以及服务的注册和动态上下线.这里先上一篇RPC的实现者一webservice,便于后面理解源码执行过程,框架就是在原理的基础上提供更加便捷的使用而已,协议就是基于TCP或UDP之上,服务者和调用者之间约定消息按照什么样的格式发送以及解析罢了.协议没什么高深莫测的. 原文和作者

JAVA程序 写供别人调用的接口方法的时候 异常应该怎么处理?

要看出现的是哪种异常了.如果是使用某些定义好的函数,并且函数本身会产生异常处理方法一般两种:1.自己用try{}catch(){}语句捕获异常并处理.2.在定义接口的后面写上throw Exception.把异常抛出让使用接口的人处理异常.两种方法都可以.但如果是RuntimeException异常,那就是自己程序某些地方写错了,那你就必须找到并修改程序.JAVA程序 写供别人调用的接口方法的时候 异常应该怎么处理?,布布扣,bubuko.com

php调用webservice接口,java代码接收不到参数

前段时间做了一个项目的二次开发,有个功能是需要php调用java实现的webservice接口,并传递一些参数给接口,然后按照对方提供的接口说明文档进行传参调用,java那边有接收到请求,但是参数总是为null,部分代码如下: 1 $client = new SoapClient ($this->webServiceUrl); 2 $client->soap_defencoding = 'utf-8'; 3 $client->xml_encoding = 'utf-8'; 4 $para

JNI之JAVA调用C++接口

1.JNI定义(来自百度百科) JNI是Java Native Interface的缩写,中文为JAVA本地调用.从Java1.1开始,Java Native Interface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互.JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了. 2.java通过JNI调用c++接口步骤 1).创建java包.类 此处创建 包myJNI,类TestJNI pac