Java 之 调用.Net的 WebService 整理
最开始.net的Service代码如下:
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols; namespace Service
{
[WebService(Namespace = "http://192.168.168.180/ss/Service.asmx")] /// <summary>
/// Service1 的摘要说明。
/// </summary>
public class Service : System.Web.Services.WebService
{
public Service()
{
//CODEGEN: 该调用是 ASP.NET Web 服务设计器所必需的
InitializeComponent();
} #region 组件设计器生成的代码 //Web 服务设计器所必需的
private IContainer components = null; /// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{ } /// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose(bool disposing)
{
if (disposing && components != null)
{
components.Dispose();
}
base.Dispose(disposing);
} #endregion [WebMethod(Description = "test")]
public string GetTestQuestions(string TeacherName, string Subject)
{
return "1";
}
}
}
=================
Java调用代码:
public static String GetTestQuestions(String TeacherName,String Subject){
String result = "";
try{
Service service = new Service();
Call call = (Call) service.createCall();
//call.setOperationName(new QName("Namespace名", "方法名"));
call.setOperationName(new QName("", "GetTestQuestions"));
call.addParameter("TeacherName", XMLType.XSD_STRING, ParameterMode.IN);
call.addParameter("Subject", XMLType.XSD_STRING, ParameterMode.IN);
call.setTargetEndpointAddress(new URL(
"http://192.168.168.180/ss/Service.asmx"));
result = (String) call.invoke(new Object[] { TeacherName, Subject});
}catch(Exception e){
e.printStackTrace();
}
return result;
}
public static void main(String args[]){
System.out.println(UserWebService.GetTestQuestions("aaa", "HOMA060E"));
}
--------------------
结果用java调用时总提示:faultString: 服务器未能识别 HTTP 标头 SOAPAction 的值:。
--------------------
解决方法:
.net WebService代码:
在webservicenamespace后面增加:
[SoapDocumentService(RoutingStyle=SoapServiceRoutingStyle.RequestElement)]
java调用错误变成了:faultString: 无法识别请求元素 <GetTestQuestions xmlns=''>。
解决方法:
java绿色背景代码更改成:call.setOperationName(new QName("http://192.168.168.180/ss/Service.asmx", "GetTestQuestions"));
问题原因:
.net的webservice指定了namespace:http://192.168.168.180/ss/Service.asmx,但是java调用时没有指定,所以总提示找不到“<GetTestQuestions xmlns=''>”,如果我们仔细查看.net webservice的soap请求格式时会发现,要求的格式是(注意绿色背景部分)。
下面是一个 SOAP 请求和响应示例。所显示的占位符需要由实际值替换。
POST /ss/service.asmx HTTP/1.1
Host: 192.168.168.180
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://192.168.168.180/ss/Service.asmx/GetTestQuestions" <?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetTestQuestions xmlns="http://192.168.168.180/ss/Service.asmx">
<TeacherName>string</TeacherName>
<Subject>string</Subject>
</GetTestQuestions>
</soap:Body>
</soap:Envelope>
Java 之 调用.Net的 WebService 整理的更多相关文章
- Java客户端调用.NET的WebService
项目需要去调用.NET的WebSrevice,本身是Java,研究了半天,终于有些头绪,记下来. 1,新建.NET WebService.只在原方法上加上一个string类型的参数str [WebMe ...
- java客户端调用c#的webservice服务
此处使用到了CXF框架,可以使用以下坐标从maven仓库中获取相关jar包: <dependency> <groupId>org.apache.cxf</groupId& ...
- Java动态调用webService,axis2动态调用webService
Java动态调用webService axis2动态调用webService >>>>>>>>>>>>>>>& ...
- java调用第三方的webservice应用实例
互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他网站的内容信息集成到我们的Web应用中显示. 一些常用的webservice网站的链接地址: ...
- java调用第三方的webservice应用实例【转载】
互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他网站的内容信息集成到我们的Web应用中显示. 一些常用的webservice网站的链接地址: ...
- java调用.net的webservice接口
要调用webservice,首先得有接口,用已经写好的接口地址在myEclipse的目标project中,右键->new web service client-> 选择JAX-WS方式,点 ...
- java中调用dll文件的两种方法
一中是用JNA方法,另外是用JNative方法,两种都是转载来的, JNA地址:http://blog.csdn.net/shendl/article/details/3589676 JNativ ...
- JAX-WS 学习一:基于java的最简单的WebService服务
JAVA 1.6 之后,自带的JAX-WS API,这使得我们可以很方便的开发一个基于Java的WebService服务. 基于JAVA的WebService 服务 1.创建服务端WebService ...
- cxf调用c#的webservice
java调用c#的webservice,如今已经測试通过.并且用到了项目中. 如今把实现方式和遇到的问题分享给大家.详细源代码例如以下: JaxWsDynamicClientFactory dcf = ...
随机推荐
- IE下设置unselectable与onselectstart属性的bug,Firefox与Chrome下的解决方案
在IE下给DIV设置unselectable与onselectstart属性,可以让div的内容不能选中,这个功能在很多情况下,非常有用,但是他的bug太明显, 直接使用一个DIV是可以的,比如: & ...
- SharePoint 2010 获取列表中所有数据(包括文件夹内)的方法
转: http://blog.csdn.net/wangwenism/article/details/8751411 SharePoint的列表能存储文件以及文件夹,用户使用的时候,经常会建几个分类文 ...
- 如何将域中的AD数据导入SharePoint
转:http://www.cnblogs.com/wallis0922/archive/2010/09/29/1838292.html 最近刚装好sharepoint2010,想要研究一下,第一件想做 ...
- Gen_fsm行为实践与分析
1.简介 Gen_fsm是一个通用的有限状态机,它描述了这样的一组关系: State(S) x Event(E) -> Actions(A),State(S') 这个关系意味着:如果在S状态下发 ...
- Android UI -- 布局介绍(布局包括FrameLayout, LinearLayout, RelativeLayout, GridLayout)
首先介绍常用布局类 FrameLayout 最简单的布局管理器. 这个布局管理类有几个特性: 添加组件默认在左上角的. 如果添加多个组件会叠加到一起,并且都在左上角.(可以通过一gravity属性改变 ...
- python def说明
可以这样讲,def定义了一个模块的变量,或者说是类的变量.它本身是一个函数对象.属于对象的函数,就是对象的属性.当然,你也可以叫它“方法”. python 的函数和其他语言的函数有很大区别.它是可以被 ...
- mybatis系列-01-JDBC
1.1 环境 java环境:jdk1.7.0_79 eclipse mysql:5.7 1.2 创建mysql数据 导入下边的脚本: 导入之后数据库: sql_table.sql:记录 ...
- 50道经典的JAVA编程题(26-30)
50道经典的JAVA编程题(26-30),这么晚了,早点睡了要,明早8点考java祝我好运吧!!!晚安~ [程序26]Ex26.java(跳过了,好没意思的题啊)题目:请输入星期几的第一个字母来判断一 ...
- HW7.2
import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...
- [Objective-c 基础 - 1.1] OC类
Obj-C中没有包得概念,使用前缀进行区分 自带类用NS开头命名 关键字使用@开头 A. 第一个OC程序 1. 导入Foundation框架的主头文件 #import <Foundation ...