如何在java中调用ac#web服务?
我创建了一个调用C#Web服务的java应用程序。 这是代码。
package callwebserviceadd; import java.util.Iterator; import javax.xml.soap.*; import javax.xml.transform.*; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Node; public class CallWebServiceAdd { public static void main(String[] args) { // TODO code application logic here String a = "10"; String b = "20"; String op = "Addweb"; String urn = "WebService1"; String dest = "http://localhost:1267/WebService1.asmx"; try { SOAPConnectionFactory soapConnFact = SOAPConnectionFactory.newInstance(); SOAPConnection conn = soapConnFact.createConnection(); MessageFactory msgFact = MessageFactory.newInstance(); SOAPMessage msg = msgFact.createMessage(); SOAPPart soapPart = msg.getSOAPPart(); SOAPEnvelope envelop = soapPart.getEnvelope(); envelop.addNamespaceDeclaration("xsd", "http://www.w3.org/2001/XMLSchema"); SOAPBody body = envelop.getBody(); QName bodyName = new QName("http://localhost:1267/","Addweb"); SOAPElement bodyElement = body.addBodyElement(bodyName); QName name = new QName("A"); SOAPElement symbol = bodyElement.addChildElement(name); symbol.addTextNode(a); /*SOAPElement bodyelement = body.addChildElement("Addition"); SOAPElement bodyelement1 = bodyelement.addChildElement("a").addTextNode(a); SOAPElement bodyelement2 = bodyelement.addChildElement("b").addTextNode(b); */ MimeHeaders headers = msg.getMimeHeaders(); headers.addHeader("SOAPAction", "http://localhost:1267/WebService1.asmx"); //msg.writeTo(System.out); msg.saveChanges(); SOAPMessage reply = conn.call(msg, dest); soapPart = reply.getSOAPPart(); envelop = soapPart.getEnvelope(); body = envelop.getBody(); Iterator iter = body.getChildElements(); Node resultOuter = ((Node)iter.next()).getFirstChild(); Node result = resultOuter.getFirstChild(); System.out.println("add(" + a + ","+ b + ") = " + result.getNodeValue()); reply.writeTo(System.out); conn.close(); } catch(Exception e) { System.out.println(e.getMessage()); } } }
错误
Server did not recognize the value of HTTP Header SOAPAction: http://localhost:1267/WebService1.asmx
预期结果
add(10,20) = 30
c#webservice代码
public class WebService1: System.Web.Services.WebService { [WebMethod] public int AddProg(int a, int b) { return a + b; } }
返回XML
soap:Client System.Web.Services.Protocols.SoapException: Server did not recognize the value of HTTP Header SOAPAction: http://localhost:1267/WebService1.asmx. at System.Web.Services.Protocols.Soap11ServerProtocolHelper.RouteRequest() at System.Web.Services.Protocols.SoapServerProtocol.RouteRequest(SoapServerMessage message) at System.Web.Services.Protocols.SoapServerProtocol.Initialize() at System.Web.Services.Protocols.ServerProtocol.SetContext(Type type, HttpContext context, HttpRequest request, HttpResponse response) at System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing)BUILD SUCCESSFUL (total time: 1 second)
标题有什么问题?
编辑
WebService1.wsdl
您在java代码headers.addHeader("SOAPAction", "http://localhost:1267/WebService1.asmx");
指定的soapAction headers.addHeader("SOAPAction", "http://localhost:1267/WebService1.asmx");
应该对应于您要定位的操作指定的soapAction,即http://tempuri.org/HelloWorld
或http://tempuri.org/Addweb
。
SOAPAction
标头的值是错误的。 对于每个操作,应在WSDL中给出正确的值。 例如http://tempuri.org/HelloWorld
用于HelloWorld
操作
或http://tempuri.org/Addweb
用于Addweb
操作