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#,強無敵!
轉載于:https://www.cnblogs.com/smilesginger/p/7233715.html
總結
以上是生活随笔為你收集整理的C# 调用Java接口的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: PMM 对MYSQL 的监控配制
- 下一篇: SSH框架搭建的时候遇到的问题
