最近做一个接口需要调用.net提供的WebService,调试过程很痛苦,总是出现Server was unable to read request的错误,并且.net服务端怎么都接不到传送的参数,接到的都是null。在网上查了半天资料也没有解决,最后下了个vs2008自己来写.net的服务学习了一下,才把问题搞定。
Rpc风格的.net服务端代码:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;
namespace WebService1
{
[WebService(Namespace = "http://tempuri.org/")]
public class Service1 : System.Web.Services.WebService
{
[WebMethod]
[SoapRpcMethod(Action = "http://tempuri.org/hello", RequestNamespace = "http://tempuri.org/", ResponseNamespace = "http://tempuri.org/")]
public string hello(String s)
{
return "Hello,"+s;
}
}
}
Document风格的.net服务端代码:
namespace WebService1
{
[WebService(Namespace = "http://tempuri.org/")]
public class Service1 : System.Web.Services.WebService
{
[WebMethod]
public string hello(String s)
{
return "Hello,"+s;
}
}
}
java客户端代码:
String url="http://localhost:1117/Service1.asmx";
String namespace = "http://tempuri.org/";
String methodName = "hello";
String soapActionURI = "http://tempuri.org/hello";
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL(url));
call.setUseSOAPAction(true);
//这个地方没设对就会出现Server was unable to read request的错误
call.setSOAPActionURI(soapActionURI);
call.setOperationName(new QName(namespace, methodName));
/*这里如果设置成call.addParameter(new QName(namespace,"s"), XMLType.XSD_STRING,
ParameterMode.IN);就是调用document风格的.net服务端
如果设反了,.net服务端就接不到参数,接到的是null
*/
call.addParameter("s", XMLType.XSD_STRING, ParameterMode.IN);
call.setReturnType(XMLType.XSD_STRING);
String ret = (String) call.invoke(new Object[] { "kusix" });
System.out.println("返回结果---> " + ret);
如果.net在提供Rpc服务时设置成
[SoapRpcMethod(Action = "",.....
的话,那java客户端连
call.setUseSOAPAction(true);
call.setSOAPActionURI(soapActionURI);
这2句都可以去掉了
分享到:
相关推荐
Java调用.NET WebService是跨平台通信的一种常见方式,尤其在企业级应用中,不同技术栈的应用需要相互交互数据时,这种技术尤为实用。Apache Axis是Java中常用的用于调用Web服务的工具,它提供了方便的API来创建和...
总结来说,Java通过Apache Axis调用.NET ASMX WebService主要涉及以下几个步骤: 1. 添加必要的依赖库。 2. 创建Service和Call对象。 3. 设置目标Web服务地址、操作名称、参数和返回类型。 4. 调用Web服务方法并接收...
Java程序调用.NET/C#的Web服务是一种跨平台的交互方式,主要依赖于SOAP(Simple Object Access Protocol)协议,使得不同编程语言开发的应用程序能够相互通信。在本场景中,用户已经提供了一个.NET的Web服务,而我们...
【Java与.NET开发WebService详解大全】 在IT领域,WebService是一种基于标准协议(如SOAP和WSDL)的跨平台、跨语言的...对于开发者来说,理解这两种语言如何互调的细节至关重要,有助于提高系统的可扩展性和集成能力。
Java和.NET作为两种主流的开发平台,它们之间能够通过Web Services实现数据交换和功能调用,使得跨平台协作变得可能。Web Services是一种基于XML的开放标准,允许应用程序之间通过互联网进行通信,而无需关心底层的...
我们将深入讲解两种主流的方法:Axis和XFire。 **一、 Axis** 1. **Axis简介**: Axis是Apache软件基金会的一个开源项目,它提供了一套用于构建和部署Web服务的工具和库。在Java中,Axis使得调用.NET的Web服务变得...
Java调用.NET编写的Web服务主要是通过SOAP协议进行通信,这是一种基于XML的远程过程调用标准。本文将详细探讨如何使用Java的Axis1.x库来调用.NET WebService,并介绍在此过程中可能遇到的问题及解决方案。 首先,让...
Java Web Service 主要有两种形式:SOAP-based 和 RESTful。本文将关注SOAP-based Web Service。 #### SOAP-based Web Service SOAP(Simple Object Access Protocol)是一种轻量级协议,用于在分布式环境中交换...
在示例中,使用了Axis1.x版本(具体为1.4)来调用.NET Web服务。首先,创建一个Service对象,并实例化Call对象。然后,设置目标端点地址(即Web服务的URL),操作名称(对应于Web服务方法),以及输入和输出参数。...
在Java中,Apache Axis库提供了用于创建和调用WebService的工具。 在Java中调用WebService接口,主要涉及以下几个步骤: 1. **创建Service对象**:`Service`是Apache Axis库中的一个类,用于初始化并管理与...
这两种方法都可以实现Java调用WebService,但手动构建更灵活,适用于没有预生成客户端代码的情况。 通过这个例子,你可以了解到在Java(尤其是Android)环境中调用WebService的基本流程和关键点,为你的项目提供了...
2. **Struts 2.1.6实现的Web版PIM**:此项目强调了在Web环境中使用WebService,包括直接调用Java类和通过HTTP SOAP协议两种方式。 3. **C#实现的PIM**:展示了Java和.NET技术的集成,演示了如何在多平台环境中协同...
2. **后端调用**:对于服务器端的应用,例如Java、.NET或其他语言,你可以使用对应的Web服务客户端库(如Apache Axis for Java,或者.NET的SoapHttpClient类)来创建一个代理类,这个类封装了Web服务的调用细节。...
这两种调用方式分别封装在两组Model类中。可以通过配置 struts.xml文件来提定使用哪组模型类(调用方式)。第三个项目使用了C#来实现PIM。这个项目的目的是为了演示如何将.net技术与Java 技术集成来实现一个完整的...
Java 调用 Webservice 接口方法有多种方式,下面我们将介绍两种常见的方式:直接 AXIS 调用远程的 Webservice 和直接 SOAP 调用远程的 Webservice。 直接 AXIS 调用远程的 Webservice 使用 AXIS 框架可以直接调用...