.Net调用Java端带有WS-Security支持的Web Service【亲测通过】
做了几年的开发,今天终于鼓起勇气开通了博客园。平时都是找各种大牛,看他们的分享博客的解决BUG。从今天起,我也开始分享我学习之路。还望大家多多支持!
最近收到一个采用Axis2实现的WebService通过.net对接的需求,开始已为挺简单的一个事,常规引用调用后,测试不通过,需要验证密码。之后。。。开始疯狂的寻码之旅。
方案一:https://www.cnblogs.com/yf2011/p/5465558.html
本方案让我试的好苦,WSE 2.0、WSE 3.0 都是vs老版本的(本人用VS 2017 ),我尝试了一下WSE 3.0,没有成功。大家可以试试,VS2017 NuGET包里还有WSE 3.0,应该是可以的。
本人方案:
参考地址1:https://blog.csdn.net/yiwenbiao68/article/details/46909395
参考地址2: https://stackoverflow.com/questions/734355/clueless-about-how-to-create-soap-wssesecurity-header
参考地址3:https://blog.csdn.net/oscar999/article/details/40340819
首先本人采用的是WCF配置方案。 参考地址1 解决了WSDL地址如何通过WCF工具 生成客户端可调用的.cs文件。
操作步骤:
- 打开VS 2017的开发人员命令提示符工具
- 输入svcutil.exe http://localhost:6054/ServiceDemo.svc?wsdl ,直接回车会生成两个文件.cs、.config。
- .cs文件直接拷贝到项目中,.config改成你项目的app.config替换。打开app.config文件
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="data1Binding" />
</basicHttpBinding>
<customBinding>
<binding name="data2Binding">
<textMessageEncoding messageVersion="Soap12" />
<httpTransport />
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="http://XXX1.com/"
binding="basicHttpBinding" bindingConfiguration="data1Binding"
contract="dataServicePortType" name="dataServiceHttpSoap11Endpoint" />
<endpoint address="http://XXX2.com/"
binding="customBinding" bindingConfiguration="data2Binding"
contract="dataServicePortType" name="dataServiceHttpSoap12Endpoint" />
</client>
</system.serviceModel>
</configuration>采坑一:有点可能和我一样有两个地址。那对不起只能用一个,删除一个即可。
采坑二:如果你的WCF做为一个单项目,要将.config文件内容添加到主项目的.config文件中。 - 添加一个SecurityHeader类,代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace Code
{
public class SecurityHeader : System.ServiceModel.Channels.MessageHeader
{
public string userName;
public string password; public SecurityHeader(string name,string psw) {
userName = name;
password = psw;
} protected override void OnWriteStartHeader(System.Xml.XmlDictionaryWriter writer, System.ServiceModel.Channels.MessageVersion messageVersion)
{
writer.WriteStartElement("wsse", Name, Namespace);
writer.WriteXmlnsAttribute("wsse", Namespace);
} protected override void OnWriteHeaderContents(System.Xml.XmlDictionaryWriter writer, System.ServiceModel.Channels.MessageVersion messageVersion)
{
writer.WriteStartElement("wsse", "UsernameToken", Namespace); writer.WriteStartElement("wsse", "Username", Namespace);
writer.WriteValue(userName);
writer.WriteEndElement(); writer.WriteStartElement("wsse", "Password", Namespace);
writer.WriteAttributeString("Type", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText");
writer.WriteValue(password);
writer.WriteEndElement();
writer.WriteEndElement(); } public override string Name
{
get { return "Security"; }
} public override string Namespace
{
get { return "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"; }
}
}
}此类主要作用是手动创建了SOAP协议请求头,参考地址2 为原创。参考地址3 是我找到的JAVA版代码,应该能很好的解释为什么要这么写。
- 调用方法,代码如下:
public static void Main(string[] args)
{ var webService = new ServiceReference1.MyWebService();//你的webservice
webService.Open(); using (OperationContextScope scope = new OperationContextScope((IContextChannel)webService.InnerChannel))
{ MessageHeaders messageHeadersElement = OperationContext.Current.OutgoingMessageHeaders;
messageHeadersElement.Add(new SecurityHeader("UserName", "Password")) var res = webService.MyServe("方法参数");//webservice 里的方法
Console.WriteLine(res.ToString());
}
}
这样就可以生成测试了,是不是感觉很简单。可我就是为此事做了三天。第一次写,写的不好的地方,大家请谅解!
.Net调用Java端带有WS-Security支持的Web Service【亲测通过】的更多相关文章
- .Net调用Java端带有WS-Security支持的Web Service各方案实战【转】
原文:http://www.xuebuyuan.com/641669.html 到现在为止,我们AEP平台已经发布很长一段时间了,也有很多ISV接入并上线了,就语言而言,目前主要有三类:Java..N ...
- spring mybatis 3.2调用mysql存储过程返回多结果集(完整、亲测、可用)
最近,有个开发提了个需求,希望中间件支持调用mysql存储过程时支持多结果集返回,因为某些原因我们使用了不少的存储过程,很多复杂的逻辑目前来看交互非常的多,所以从当前的现状来说,这个需求还是蛮合理的. ...
- idea激活教程(永久)支持2019 3.1 亲测
此教程已支持最新2019.3版本 本教程适用Windows.Mac.Ubuntu等所有平台. 激活前准备工作 配置文件修改已经不在bin目录下直接修改,而是通过Idea修改 如果输入code一直弹出来 ...
- android NDK 实用学习(五)-c++端调用java接口
1,阅读此文章前请阅读前面文章,以免阅读出现障碍: android NDK 实用学习(一)-获取java端类及其类变量 android NDK 实用学习(二)-java端对象成员赋值和获取对象成员值 ...
- NET调用Java之100-Continue的坑
场景:这段时间开发的时候遇到了需要NET调用java的restful api的情况,java端用的服务器是tomcat,框架是spring boot,net调用java端的接口之后只要java端的接口 ...
- .Net调用Java的实现方法
一. IKVM 1.1下载配置IKVM 1.1.1. 下载路径 http://www.ikvm.net/index.html 1.1.2. 设置路径 解压ikvm-0.42.0.3.zip,并将%IK ...
- AndroidJNI 调用JAVA(转)
转自:http://www.cnblogs.com/likwo/archive/2012/05/21/2512400.html 1. JNIEnv对象 对于本地函数 JNIEXPORT ...
- C#开发和调用Web Service
http://blog.csdn.net/h0322/article/details/4776819 1.1.Web Service基本概念 Web Service也叫XML Web Service ...
- ASP.NET调用Web Service
1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求, ...
随机推荐
- .netcore部署centos
前言:最近公司有个项目用 .netcore开发的项目,然后闲的没事就研究如果发布到Linux系统上 需要安装的插件以及支撑架构 1.dotnetSDK 2.jexus Jexus 是Linux平台上 ...
- umeng推送, 生产环境deviceToken失效可能原因
1 在系统升级之后会造成app的deviceToken重置(一定). 2 在app卸载之后可能会造成app的deviceToken重置. 3 deviceToken重置使用umeng推送时会因为dev ...
- Django templates html中进行模板渲染时使用python语法的基本方式
导包(可以在模板中导入python包进行使用): <%!import urllib%> <%! from ** import **%> 使用if for等python语句: % ...
- 学习Python中的集合
创建集合 使用工厂方法 set()和 frozenset(): >>> s = set('cheeseshop') >>> s set(['c', 'e', 'h' ...
- class字节码结构(四)(方法集合的结构)
<Java虚拟机原理图解>1.5. class文件中的方法表集合--method方法在class文件中是怎样组织的 一个类有多个方法,所以方法肯定是一个集合. 目标是: 1,了解方法在字节 ...
- UITableView 的常用可复制代码
UITableView是使用中最常用的工具,下面列举一个常用的tableview类,以后直接复制代码,稍作修改,就能用了. #import "ViewController.h" @ ...
- 转MVC3介绍
第一节:Asp.Net MVC3项目介绍 让我们先看一下,一个普通的Asp.Net MVC3项目的样例,如下图所示 跟WebFrom还是有区别的,如果你已经了解Asp.Net MVC2的话,那就感觉异 ...
- 【原创】Team Foundation Server 域环境迁移
先说下此片博客的上下文:部门所在的业务被集团出售,因此我们所有的计算机和服务器都得重新命名,退出当前域加入新公司的域.对于PC和其他服务器,目前不存在太大问题.但是对于Team Foundation ...
- tensorflow进阶篇-4(损失函数1)
L2正则损失函数(即欧拉损失函数),L2正则损失函数是预测值与目标函数差值的平方和.L2正则损失函数是非常有用的损失函数,因为它在目标值附近有更好的曲度,并且离目标越近收敛越慢: # L = (pre ...
- 【Java并发编程】:volatile变量修饰符
volatile用处说明 在JDK1.2之前,java的内存模型实现总是从主存(即共享内存)读取变量,是不需要进行特别的注意的.而随着JVM的成熟和优化,现在在多线程环境下volatile关键 ...