java调用.net asmx / wcf_web servicejava 调用 .net asmx / wcf 服务代码示例



一、先用asmx与wcf写二个.net web service:

1.1 asmx web服务:asmx-service.asmx.cs


java调用.net asmx / wcf_.net_02java调用.net asmx / wcf_java_03


1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Web;
5 using System.Web.Services;
6
7 namespace WebServiceSample
8 {
9 /// <summary>
10 /// Summary description for asmx_service
11 /// </summary>
12 [WebService(Namespace = "javascript:void(0)/")]
13 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
14 [System.ComponentModel.ToolboxItem(false)]
15 // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
16 // [System.Web.Script.Services.ScriptService]
17 public class asmx_service : System.Web.Services.WebService
18 {
19
20 [WebMethod]
21 public string HelloWorld(String msg)
22 {
23 return "Hello " + msg + " !";
24 }
25 }
26 }

View Code

1.2 wcf服务:wcf-service.svc.cs


java调用.net asmx / wcf_.net_02java调用.net asmx / wcf_java_03


1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Runtime.Serialization;
5 using System.ServiceModel;
6 using System.Text;
7 using System.Web.Services;
8
9 namespace WebServiceSample
10 {
11 // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "wcf_service" in code, svc and config file together.
12 // NOTE: In order to launch WCF Test Client for testing this service, please select wcf-service.svc or wcf-service.svc.cs at the Solution Explorer and start debugging.
13 [ServiceContract(Namespace="javascript:void(0)/")]
14 [ServiceBehavior(Namespace = "javascript:void(0)/")]
15 public class wcf_service
16 {
17 [OperationContract]
18 public String HelloWorld(String msg)
19 {
20 return "Hello " + msg + " !";
21 }
22 }
23 }

View Code

1.3 web.config采用默认设置:


java调用.net asmx / wcf_.net_02java调用.net asmx / wcf_java_03


1 <?xml version="1.0" encoding="utf-8"?>
2 <configuration>
3 <system.web>
4 <compilation debug="true" targetFramework="4.5.1" />
5 <httpRuntime targetFramework="4.5.1" />
6 </system.web>
7 <system.serviceModel>
8 <behaviors>
9 <serviceBehaviors>
10 <behavior name="">
11 <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
12 <serviceDebug includeExceptionDetailInFaults="false" />
13 </behavior>
14 </serviceBehaviors>
15 </behaviors>
16 <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
17 multipleSiteBindingsEnabled="true" />
18 </system.serviceModel>
19 </configuration>

View Code

完成后,访问网址为:

http://localhost:16638/asmx-service.asmx

http://localhost:16638/wcf-service.svc

 

二、java端的调用:

2.1 pom.xml中先添加以下依赖项:


java调用.net asmx / wcf_.net_02java调用.net asmx / wcf_java_03


1 <dependency>
2 <groupId>org.apache.axis</groupId>
3 <artifactId>axis</artifactId>
4 <version>1.4</version>
5 </dependency>
6
7 <dependency>
8 <groupId>org.apache.axis</groupId>
9 <artifactId>axis-jaxrpc</artifactId>
10 <version>1.4</version>
11 </dependency>
12
13 <dependency>
14 <groupId>wsdl4j</groupId>
15 <artifactId>wsdl4j</artifactId>
16 <version>1.6.3</version>
17 </dependency>
18
19 <dependency>
20 <groupId>commons-discovery</groupId>
21 <artifactId>commons-discovery</artifactId>
22 <version>0.5</version>
23 </dependency>
24
25 <dependency>
26 <groupId>commons-logging</groupId>
27 <artifactId>commons-logging</artifactId>
28 <version>1.1.3</version>
29 </dependency>

View Code

2.2 asmx web service的调用:

先封装一个方法:


java调用.net asmx / wcf_.net_02java调用.net asmx / wcf_java_03


1     String callAsmxWebService(String serviceUrl, String serviceNamespace,
2 String methodName, Map<String, String> params)
3 throws ServiceException, RemoteException, MalformedURLException {
4
5 org.apache.axis.client.Service service = new org.apache.axis.client.Service();
6 Call call = (Call) service.createCall();
7 call.setTargetEndpointAddress(new java.net.URL(serviceUrl));
8 call.setOperationName(new QName(serviceNamespace, methodName));
9
10 ArrayList<String> paramValues = new ArrayList<String>();
11 for (Entry<String, String> entry : params.entrySet()) {
12 call.addParameter(new QName(serviceNamespace, entry.getKey()),
13 XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
14 paramValues.add(entry.getValue());
15 }
16
17 call.setReturnType(XMLType.XSD_STRING);
18 call.setUseSOAPAction(true);
19 call.setSOAPActionURI(serviceNamespace + methodName);
20
21 return (String) call.invoke(new Object[] { paramValues.toArray() });
22
23 }

View Code

然后就可以调用了:


java调用.net asmx / wcf_.net_02java调用.net asmx / wcf_java_03


1     @Test
2 public void testCallAsmx() throws RemoteException, ServiceException,
3 MalformedURLException {
4
5 Map<String, String> params = new HashMap<String, String>();
6 params.put("msg", "yjmyzz");
7
8 String result = callAsmxWebService(
9 "http://localhost:16638/asmx-service.asmx",
10 "javascript:void(0)/", "HelloWorld", params);
11
12 System.out.println(result);
13 }

View Code

 

2.3 wcf服务的调用:

这个要借助IDE环境生成代理类(或者用命令JAVA_HOME\bin\wsimport.exe -s  c:\test\javasrc http://xxx.com/xxx.svc?wsdl)

eclipse环境中,project上右击->New->Other->Web Service Client

java调用.net asmx / wcf_.net_14

输入wsdl的地址,注意:wcf会生成二个wsdl的地址,用xxx?singleWsdl这个,如下图:

java调用.net asmx / wcf_java_15

直接Finish,会生成一堆java文件:

java调用.net asmx / wcf_asmx_16

然后就能调用啦:


java调用.net asmx / wcf_.net_02java调用.net asmx / wcf_java_03


1     @Test
2 public void testCallWcf() throws RemoteException, ServiceException,
3 MalformedURLException {
4
5 Wcf_service_ServiceLocator locator = new Wcf_service_ServiceLocator();
6 locator.setBasicHttpBinding_wcf_serviceEndpointAddress("http://localhost:16638/wcf-service.svc");
7 System.out.println(locator.getBasicHttpBinding_wcf_service().helloWorld("jimmy"));
8 }

View Code

 


作者:菩提树下的杨过