Knight of the round table

          wansong

          Java調用.NET webservice方法的幾種方式

          http://liyuandong.javaeye.com/blog/567836

          JAVA用這種方式調用webservice,需要注意的地方:
          1. 服務器未能識別 HTTP 標頭 SOAPAction 的值:
          癥狀一:
          Web Service + ASP.NET 應用程序部署到服務器默認目錄中,在IE中用http://<服務器地址>/<程序目錄名>/<默認啟動頁面名>發生“服務器未能識別 HTTP 標頭 SOAPAction 的值”錯誤。
          癥狀二:
          在Java平臺上調用.NET Web Service的服務時,出現"服務器未能識別 HTTP 標頭 SOAPAction 的值"。
          癥狀三:
          在Java平臺下調用.NET WEB Service,出現數據時有時無。

          解決對策:

          給.NET的WebService類(即.asmx文件下的類)添加屬性[SoapDocumentService(RoutingStyle=SoapServiceRoutingStyle.RequestElement)]
          小知識:
          什么是SoapAction?它在WSDL中有何作用?
          SOAPAction HTTP request header被用來標識SOAP HTTP請求的目的地,其值是個URI地址。SOAP發送并不限制格式、URI特征或其必須可解析,那么在這種情況下,發送一個HTTP SOAP請求時,其HTTP客戶端必須使用/指明SOAPAction HTTP request header。

          SOAPAction header的內容可以被用在服務端,諸如:防火墻適當的過濾基于HTTP的SOAP請求消息等場景。SOAPAction header的值為空串("")表示SOAP消息的目的地由HTTP請求的URI標識;無值則表示沒有指定這條消息的目的地。

          本人補充:
          在.NET環境調用.NET WebService出現 “SOAPAction 值在 XML Web services 的所有方法中不唯一的錯誤”,也可以通過此法解決。

          2. 為了Java能夠調用WebService的方法,所以。NETP寫的WebServiced的每個方法都要聲明為Rpc方法,即添加"[SoapRpcMethod.....]".
          例如:[WebMethod]
                  [SoapRpcMethod(Use=SoapBindingUse.Literal,Action= http://tempuri.org/HelloWorld", RequestNamespace = "http://tempuri.org/", ResponseNamespace = "http://tempuri.org/")]

          3. 對返回值、參數的處理上:
          應盡量將webservice方法的返回值、參數都寫成字符串(String)不要使用復雜對象類型,這樣便于在網絡上傳輸。避免了復雜對象類型的不易轉換問題。。。對于返回類型是字符串數組型的,可以設置返回類型為org.apache.axis.encoding.XMLType.SOAP_VECTOR或java.lang.String[].class.

          posted on 2010-12-17 13:05 w@ns0ng 閱讀(1081) 評論(0)  編輯  收藏 所屬分類: J2EEweb service

          主站蜘蛛池模板: 和政县| 叶城县| 清丰县| 广汉市| 兴安县| 焉耆| 盱眙县| 长岭县| 榕江县| 西城区| 五指山市| 盐山县| 玉林市| 宜君县| 黔西县| 惠水县| 平邑县| 尉氏县| 惠安县| 青冈县| 故城县| 奉节县| 安远县| 天镇县| 崇阳县| 海盐县| 永寿县| 淮南市| 万源市| 惠东县| 西藏| 阳朔县| 盖州市| 安乡县| 吉隆县| 玉龙| 阿尔山市| 平江县| 湘乡市| 通江县| 日土县|