博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 之 调用.Net的 WebService 整理
阅读量:5083 次
发布时间:2019-06-13

本文共 2948 字,大约阅读时间需要 9 分钟。

  最近做一个 java 调用 .net 服务的项目,其中 .net做了一个WebService,需要java来调用。

  最开始.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")]    ///     /// Service1 的摘要说明。    ///     public class Service : System.Web.Services.WebService    {        public Service()        {            //CODEGEN: 该调用是 ASP.NET Web 服务设计器所必需的            InitializeComponent();        }        #region 组件设计器生成的代码        //Web 服务设计器所必需的        private IContainer components = null;        ///         /// 设计器支持所需的方法 - 不要使用代码编辑器修改        /// 此方法的内容。        ///         private void InitializeComponent()        {        }        ///         /// 清理所有正在使用的资源。        ///         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("", "GetTestQuestions"));

问题原因:

  .net的webservice指定了namespace:,但是java调用时没有指定,所以总提示找不到“<GetTestQuestions xmlns=''>”,如果我们仔细查看.net webservice的soap请求格式时会发现,要求的格式是(注意绿色背景部分)。

下面是一个 SOAP 请求和响应示例。所显示的占位符需要由实际值替换。

POST /ss/service.asmx HTTP/1.1Host: 192.168.168.180Content-Type: text/xml; charset=utf-8Content-Length: lengthSOAPAction: "http://192.168.168.180/ss/Service.asmx/GetTestQuestions" 
  
    
      
string
      
string
    
  

 

转载于:https://www.cnblogs.com/xinaixia/p/4788745.html

你可能感兴趣的文章
17-1 djanjo进阶-路由,视图,模板
查看>>
Shell脚本8种字符串截取方法总结
查看>>
P3254 圆桌问题
查看>>
MapReduce的运行原理
查看>>
Leetcode: Partition List
查看>>
故障转移
查看>>
清空dataset中的某行某列的数据
查看>>
盒模型
查看>>
js中闭包和作用域
查看>>
CI框架整合UEditor编辑器上传功能
查看>>
树的层号表示
查看>>
最大整数
查看>>
[转] 数据模型建设的几点思考与总结
查看>>
[1].Common SSIS Applications
查看>>
stm8s + si4463 寄存器配置
查看>>
Asp.NetCore取配置信息
查看>>
自动变量提示
查看>>
css中盒模型的理解与整理
查看>>
Thread.currentThread().getName() ,对象实例.getName() 和 this.getName()区别
查看>>
如果你是程序员,这些细节会害死你(3)
查看>>