java调用.net asmx / wcf

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

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

 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 = "http://yjmyzz.cnblogs.com/")]
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 }

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

 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="http://yjmyzz.cnblogs.com/")]
14     [ServiceBehavior(Namespace = "http://yjmyzz.cnblogs.com/")]
15     public class wcf_service
16     {
17         [OperationContract]
18         public String HelloWorld(String msg)
19         {
20             return "Hello " + msg + " !";
21         }
22     }
23 }

1.3 web.config采用默认设置:

 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>

完成后,访问网址为:

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

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

二、java端的调用:

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

 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>

2.2 asmx web service的调用:

先封装一个方法:

 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     }

然后就可以调用了:

 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                 "http://yjmyzz.cnblogs.com/", "HelloWorld", params);
11 
12         System.out.println(result);
13     }

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

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

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

然后就能调用啦:

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     }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Jed的技术阶梯

Kafka 中使用 Avro 序列化框架(二):使用 Twitter 的 Bijection 类库实现 avro 的序列化与反序列化

使用传统的 avro API 自定义序列化类和反序列化类比较麻烦,需要根据 schema 生成实体类,需要调用 avro 的 API 实现 对象到 byte[]...

3014
来自专栏cmazxiaoma的架构师之路

SpringBoot之路(二)之Web进阶

3474
来自专栏人工智能LeadAI

使用强大的 Mockito 来测试你的代码

这篇教程介绍了如何使用 Mockito 框架来给软件写测试用例。 1、预备知识 如果需要往下学习,你需要先理解 Junit 框架中的单元测试。 如果你不熟悉 J...

1.9K6
来自专栏Java Web

JavaWeb中使用JSON

2864
来自专栏我叫刘半仙

原 荐 自己手写一个SpringMVC框架(简化)

       Spring框架对于Java后端程序员来说再熟悉不过了,以前只知道它用的反射实现的,但了解之后才知道有很多巧妙的设计在里面。如果不看Spring的...

6076
来自专栏猿天地

高性能NIO框架Netty-对象传输

上篇文章高性能NIO框架Netty入门篇我们对Netty做了一个简单的介绍,并且写了一个入门的Demo,客户端往服务端发送一个字符串的消息,服务端回复一个字符串...

3108
来自专栏Hongten

python开发_pprint()

1094
来自专栏cloudskyme

jbpm5.1介绍(9)

Junit测试调用子流程 下面的示例中测试在程序中调用其它程序的子流程的示例,需要加载两个配置文件 ? 和 ? 需要指定属性 下面是调用的示例程序 publ...

3336
来自专栏小灰灰

Spring之RestTemplate使用小结一

作为一个Java后端,需要通过HTTP请求其他的网络资源可以说是一个比较常见的case了;一般怎么做呢?

1.5K3
来自专栏一个会写诗的程序员的博客

《Springboot极简教程》 Springboot plus Kotlin :Hello,WorldKotlin, Console: Hello,WorldSpringBoot Kotlin JP

https://github.com/MiniSpringBootTutorial/mini_springboot/blob/master/src/main/k...

724

扫码关注云+社区

领取腾讯云代金券