這幾天公司需要做一個java和.net項目的整合,其中.net做了一個WebService,需要java來調用。本以為很容易的一個東西,結果弄了幾天才弄好。 最開始.net的Service代碼如下(黃色背景是自己增加的代碼): //<%@ WebService Language="C#" Class="Service" Debug=true %> namespace Service /// <summary> #region 組件設計器生成的代碼 } /// <summary> [WebMethod(Description="test")] Java調用代碼: public static String GetTestQuestions(String TeacherName,String Subject){ 結果用java調用時總提示:faultString: 服務器未能識別 HTTP 標頭 SOAPAction 的值:。 上網找了解決方法,最好修改的結果如下: .net WebService代碼: 在webservicenamespace后面增加: [SoapDocumentService(RoutingStyle=SoapServiceRoutingStyle.RequestElement)] java調用錯誤變成了:faultString: 無法識別請求元素 <GetTestQuestions xmlns=''>。 崩潰了…… …… 經過做java同學的不懈努力,終于找到解決方法: java綠色背景代碼更改成: call.setOperationName(new QName("終于得到期待的結果了。 總結一下原因: .net的webservice指定了namespace:http://192.168.168.180/ss/Service.asmx,但是java調用時沒有指定,所以總提示找不到“<GetTestQuestions xmlns=''>”,如果我們仔細查看.net webservice的soap請求格式時會發(fā)現(xiàn),要求的格式是(注意藍色背景的文字)
SOAP下面是一個 SOAP 請求和響應示例。所顯示的占位符需要由實際值替換。 POST /ss/service.asmx HTTP/1.1 Host: 192.168.168.180 Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: "http://192.168.168.180/ss/Service.asmx/GetTestQuestions" <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www./2001/XMLSchema-instance" xmlns:xsd="http://www./2001/XMLSchema" xmlns:soap="http://schemas./soap/envelope/"> <soap:Body> <GetTestQuestions xmlns="http://192.168.168.180/ss/Service.asmx"> <TeacherName>string</TeacherName> <Subject>string</Subject> </GetTestQuestions> </soap:Body> </soap:Envelope> |
|