日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用java调用.net的wcf其实还是很简单的

發(fā)布時(shí)間:2023/12/6 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用java调用.net的wcf其实还是很简单的 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

   ? 前些天和我們的一個郵件服務(wù)商對接,雙方需要進(jìn)行一些通訊,對方是java團(tuán)隊(duì),而作為.net團(tuán)隊(duì)的我們,只能公布出去的是一個wcf的basicbinding,想不

到問題來了,對方不知道怎么去調(diào)用這個basic,可能他們水平有點(diǎn)菜,有點(diǎn)尷尬,不得已我來研究研究,其實(shí)只要知道公布的wsdl,對什么語言都是很簡單的。

?

一:案例

? ? ? 為了方便,我也不特意寫什么代碼了,就用vs里面的wcf服務(wù)模板創(chuàng)建一下,詳細(xì)內(nèi)容如下:

1 // 注意: 使用“重構(gòu)”菜單上的“重命名”命令,可以同時(shí)更改代碼、svc 和配置文件中的類名“Service1”。 2 // 注意: 為了啟動 WCF 測試客戶端以測試此服務(wù),請?jiān)诮鉀Q方案資源管理器中選擇 Service1.svc 或 Service1.svc.cs,然后開始調(diào)試。 3 public class Service1 : IService1 4 { 5 public string GetData(int value) 6 { 7 return string.Format("You entered: {0}", value); 8 } 9 10 public CompositeType GetDataUsingDataContract(CompositeType composite) 11 { 12 if (composite == null) 13 { 14 throw new ArgumentNullException("composite"); 15 } 16 if (composite.BoolValue) 17 { 18 composite.StringValue += "Suffix"; 19 } 20 return composite; 21 } 22 }

?

? ? ? ? 然后F5運(yùn)行一下,就可以看到這樣的一個wcf測試客戶端,有服務(wù)地址,有提供的兩個方法契約。

?

?

二:java調(diào)用

1. 使用web service client

? ? ?其實(shí)在eclipse的新建項(xiàng)目中有一個Web Service Client 模板,這個里面就可以將wsdl轉(zhuǎn)換為proxy的java代碼,有一點(diǎn)像C#中的服務(wù)引用,是不是,

下面就一步一步操作下:

《1》 新建一個java project,或者dynamic web project都是可以的,本次測試只新建一個MyJavaTest 的project。

?

《2》 然后使用 WebService Client的模板 File ?=> Other =>Web Services => Web Service Client 即可。

?

《3》在Service definition 選項(xiàng)中輸入我們的wcf服務(wù)地址:http://localhost:54248/Service1.svc?wsdl,一定要注意

? ? ? ? ?在svc后面加上一個wsdl,這樣就方便java proxy找到哈,然后左下角有一個“溫度計(jì)”,調(diào)到start client 模式就

? ? ? ? 好,然后繼續(xù)點(diǎn)擊下步,詳細(xì)如下圖:

?

《4》 下圖就表示生成好的代碼將放入到哪一個目錄下,這個沒什么好說的。

?

《5》然后點(diǎn)擊finish,現(xiàn)在你會發(fā)現(xiàn),你多了幾個自動化的java類,便捷性和visual studio有的一拼。

?

好了,自動化的類都出來了,接下來我只需要新建了一個入口的Program類,是不是就可以敲定了。。。

1 package com.datamip; 2 3 import java.rmi.RemoteException; 4 5 import org.tempuri.IService1Proxy; 6 7 public class Program { 8 9 public static void main(String[] args) throws RemoteException { 10 11 IService1Proxy proxy = new IService1Proxy(); 12 13 String result = proxy.getData(12345); 14 15 System.out.println(result); 16 } 17 18 }

不過要吐槽的是,IService1Proxy居然是一個類,我還以為是接口呢,思維定勢吧~~~

?

2. 使用wsimport小工具

? ? ? ? 其實(shí)java的jdk里面有很多的實(shí)用小工具,其中就有一款wsimport.exe,它就可以用來根據(jù)wsdl生成自動化的proxy類,和.net的svcutil的功能

是一樣的。

?

? 由于jdk路徑都配置到了環(huán)境變量中,就可以在cmd中看一下wsimport需要的參數(shù)。

C:\Users\hxc>wsimport 缺少 WSDL_URI用法: wsimport [options] <WSDL_URI>\其中 [options] 包括:-b <path> 指定 jaxws/jaxb 綁定文件或附加模式(每個 <path> 都必須具有自己的 -b)-B<jaxbOption> 將此選項(xiàng)傳遞給 JAXB 模式編譯器-catalog <file> 指定用于解析外部實(shí)體引用的目錄文件支持 TR9401, XCatalog 和 OASIS XML 目錄格式。-d <directory> 指定放置生成的輸出文件的位置-encoding <encoding> 指定源文件所使用的字符編碼-extension 允許供應(yīng)商擴(kuò)展 - 不按規(guī)范指定功能。使用擴(kuò)展可能會導(dǎo)致應(yīng)用程序不可移植或無法與其他實(shí)現(xiàn)進(jìn)行互操作-help 顯示幫助-httpproxy:<host>:<port> 指定 HTTP 代理服務(wù)器 (端口默認(rèn)為 8080)-keep 保留生成的文件-p <pkg> 指定目標(biāo)程序包-quiet 隱藏 wsimport 輸出-s <directory> 指定放置生成的源文件的位置-target <version> 按給定的 JAXWS 規(guī)范版本生成代碼默認(rèn)為 2.2, 接受的值為 2.0, 2.12.2例如, 2.0 將為 JAXWS 2.0 規(guī)范生成兼容的代碼-verbose 有關(guān)編譯器在執(zhí)行什么操作的輸出消息-version 輸出版本信息-wsdllocation <location> @WebServiceClient.wsdlLocation 值-clientjar <jarfile> 創(chuàng)建生成的 Artifact 的 jar 文件以及調(diào)用 Web 服務(wù)所需的 WSDL 元數(shù)據(jù)。-generateJWS 生成存根 JWS 實(shí)現(xiàn)文件-implDestDir <directory> 指定生成 JWS 實(shí)現(xiàn)文件的位置-implServiceName <name> 生成的 JWS 實(shí)現(xiàn)的服務(wù)名的本地部分-implPortName <name> 生成的 JWS 實(shí)現(xiàn)的端口名的本地部分\擴(kuò)展:-XadditionalHeaders 映射標(biāo)頭不綁定到請求或響應(yīng)消息不綁定到Java 方法參數(shù)-Xauthfile 用于傳送以下格式的授權(quán)信息的文件:http://username:password@example.org/stock?wsdl-Xdebug 輸出調(diào)試信息-Xno-addressing-databinding 允許 W3C EndpointReferenceType 到 Java 的綁定-Xnocompile 不編譯生成的 Java 文件-XdisableAuthenticator 禁用由 JAX-WS RI 使用的驗(yàn)證程序,將忽略 -Xauthfile 選項(xiàng) (如果設(shè)置)-XdisableSSLHostnameVerification 在提取 wsdl 時(shí)禁用 SSL 主機(jī)名驗(yàn)證\示例:wsimport stock.wsdl -b stock.xml -b stock.xjbwsimport -d generated http://example.org/stock?wsdl C:\Users\hxc>

這其中,大概知道下面4個參數(shù)就好說了。

《1》 url: 你需要生成代理類的數(shù)據(jù)源,也就是wsdl文件

《2》 -d: ?生成的proxy文件需要存放的路徑

《3》-p: ? 生成proxy類的包名。

《4》-keep:保存生成的文件名

接下來我們就cmd試一下:

C:\Users\hxc>wsimport http://localhost:54248/Service1.svc?wsdl -d c:\\2\\ -p com.datamip.proxy -keep 正在解析 WSDL...正在生成代碼...正在編譯代碼...C:\Users\hxc>

?

好了,接下來就可以將“文件夾2”中的proxy類copy到project中,如下圖:

?

看起來是不是很完美,那接下來要做的事情就是coding驗(yàn)證啦~~~

?

最后還有一種笨的方法,那就是通過fiddler抓取webservice通訊的參數(shù),然后通過httppost模擬提交,也是可以的。。。好了,本篇就和大家說到

這里,希望對你有幫助。

?

總結(jié)

以上是生活随笔為你收集整理的用java调用.net的wcf其实还是很简单的的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。