如何在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/HelloWorldhttp://tempuri.org/Addweb

SOAPAction标头的值是错误的。 对于每个操作,应在WSDL中给出正确的值。 例如http://tempuri.org/HelloWorld用于HelloWorld操作

    

http://tempuri.org/Addweb用于Addweb操作