做了几年的开发,今天终于鼓起勇气开通了博客园。平时都是找各种大牛,看他们的分享博客的解决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文件。

操作步骤:

  1. 打开VS 2017的开发人员命令提示符工具
  2. 输入svcutil.exe http://localhost:6054/ServiceDemo.svc?wsdl ,直接回车会生成两个文件.cs、.config。
  3. .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文件中。

  4. 添加一个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版代码,应该能很好的解释为什么要这么写。

  5. 调用方法,代码如下:
    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【亲测通过】的更多相关文章

  1. .Net调用Java端带有WS-Security支持的Web Service各方案实战【转】

    原文:http://www.xuebuyuan.com/641669.html 到现在为止,我们AEP平台已经发布很长一段时间了,也有很多ISV接入并上线了,就语言而言,目前主要有三类:Java..N ...

  2. spring mybatis 3.2调用mysql存储过程返回多结果集(完整、亲测、可用)

    最近,有个开发提了个需求,希望中间件支持调用mysql存储过程时支持多结果集返回,因为某些原因我们使用了不少的存储过程,很多复杂的逻辑目前来看交互非常的多,所以从当前的现状来说,这个需求还是蛮合理的. ...

  3. idea激活教程(永久)支持2019 3.1 亲测

    此教程已支持最新2019.3版本 本教程适用Windows.Mac.Ubuntu等所有平台. 激活前准备工作 配置文件修改已经不在bin目录下直接修改,而是通过Idea修改 如果输入code一直弹出来 ...

  4. android NDK 实用学习(五)-c++端调用java接口

    1,阅读此文章前请阅读前面文章,以免阅读出现障碍: android NDK 实用学习(一)-获取java端类及其类变量 android NDK 实用学习(二)-java端对象成员赋值和获取对象成员值 ...

  5. NET调用Java之100-Continue的坑

    场景:这段时间开发的时候遇到了需要NET调用java的restful api的情况,java端用的服务器是tomcat,框架是spring boot,net调用java端的接口之后只要java端的接口 ...

  6. .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 ...

  7. AndroidJNI 调用JAVA(转)

    转自:http://www.cnblogs.com/likwo/archive/2012/05/21/2512400.html   1. JNIEnv对象    对于本地函数    JNIEXPORT ...

  8. C#开发和调用Web Service

    http://blog.csdn.net/h0322/article/details/4776819 1.1.Web Service基本概念 Web Service也叫XML Web Service ...

  9. ASP.NET调用Web Service

    1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求, ...

随机推荐

  1. leetcode 缺失数字

    给定一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数. 示例 1: 输入: [3,0,1] 输出: 2 示例 2: 输入: [9,6,4,2 ...

  2. django drf 动态权限配置和动态seriaizer_class配置

    可以通过重写get_permissions方法和get_serializers_class方法来实现动态的配置权限和序列化 VIewDemo class RegUserSet(mixins.Creat ...

  3. flume在windows环境下的使用

     Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据:同时,Flume提供对数据进行简单处理, ...

  4. Python廖雪峰学习笔记——单元测试

    定义:对一个模块.一个类.一个函数进行进行正确性检验的测试性工作.当我们对函数或者模块等进行修改时,单元测试就显得尤为重要. 单元测试 = 测试用例(用来测试的数据)+测试模块

  5. Ubuntu16.04 - 安装gtk+-3.0和appindicator3-0.1

    今天在Ubuntu16.04里面遇到这样的问题: # pkg-config --cflags gtk+-3.0 appindicator3-0.1Package gtk+-3.0 was not fo ...

  6. Python os.walk() 遍历出当前目录下的文件夹和文件

    os.walk目录遍历 os.walk的参数如下: os.walk(top, topdown=True, onerror=None, followlinks=False) 其中: - top是要遍历的 ...

  7. AUTO Uninstaller 双击没有反应,AU_CN点击打不开的解决办法

    AUTO Uninstaller 双击没有反应,AU_CN点击打不开的解决办法 https://pan.baidu.com/s/1cKqdxq0T0DqYfAEkiwuJbw

  8. poj3233 Matrix Power Series(矩阵快速幂)

    题目要求的是 A+A2+...+Ak,而不是单个矩阵的幂. 那么可以构造一个分块的辅助矩阵 S,其中 A 为原矩阵,E 为单位矩阵,O 为0矩阵    将 S 取幂,会发现一个特性: Sk +1右上角 ...

  9. [nuget]VS中包管理器打开后找不到其它工程的问题

    今天新建工程做小组内用的工具,打算做个winform的项目, 用vs新建了winform项目,简单分下层吧,又加了两个类库项目, 然后,要用到的包需要nuget安装,于是发生这个问题: [VS]在so ...

  10. .gitignore释疑

    自己总结: *.a--匹配任意路径下的.a文件 a/--匹配任意路径下的a文件夹 a/*--匹配根目录下的文件夹a下的任意文件(等同于 /a/* 或 /a/)  ----一般情况下不会有这种写法 /a ...