zoukankan      html  css  js  c++  java
  • # C# 调用java的WebService添加SOAPHeader验证

    C#调用java的WebService添加SOAPHeader验证


    本文与别的网文不同的是,本文教大家利用VS添加WSDL自动生成的代理类添加SoapHeader。


    写JAVA接口的同事给了一个文档,要求在soapHeader里面加一个UserToken的验证。JAVA处理这事情其实挺简单的,就配置一下配置文件就可以了。但C#不能简单的通过配置处理。

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://webservice.m3.mls.com/">
    <soapenv:Header>	
    	<Authentication>		
    		<UserToken>EVQfaMqRNGpjmqdrKNjYvlKjVndyYcI4uUyj8OaT</UserToken>	
    	</Authentication>
    </soapenv:Header>
    <soapenv:Body>	
    	<web:getHRDeptInfo/>
    </soapenv:Body>
    </soapenv:Envelope>


    操作步骤

    1. 添加Web引用
    2. 添加Authentication类
    3. 在自动生成的Reference.cs类添加Authentication全局变量
    4. 在访问的WebService方法上方添加SOAPHeader的声明
    5. 接口调用


    1.添加Web引用

    新版本的VS已经没有添加Web引用的菜单了。只有添加服务引用的选项


    但可以在添加服务引用的高级选项中添加web引用。



    PS:为什么不能添加服务引用呢? 因为添加服务引用不会自动生成WebService代理类。所以就没办法修改它的SoapHeader。

    2.添加Authentication类

    SoapHeader的参数不一定是UserToken,也有可能是账号密码。大家根据接口提供方给出的格式自行调整。

    using System.Web.Services.Protocols;
    public class Authentication : SoapHeader
    {
        public string UserToken { get; set; }
    
    
        /// <summary>
        /// 构造函数
        /// </summary>
        public Authentication() { } 
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="usertoken">密码</param>
        public Authentication(string usertoken)
        {
            this.UserToken = usertoken;
        }
    }


    3.在自动生成的Reference.cs类添加Authentication全局变量


    public Authentication Authentication;

    4.在访问的WebService方法上方添加SOAPHeader的声明

    同样是在WebService的代理类Reference.cs里里面添加代码,主要是添加[SoapHeader("Authentication")]这一段。

    如果要更新接口的话,代理类里面的全局变量和声明记得重新添加。

        /// <remarks/>
        [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestNamespace="http://webservice.m3.mls.com/", ResponseNamespace="http://webservice.m3.mls.com/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
        [return: System.Xml.Serialization.XmlElementAttribute("return", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        [SoapHeader("Authentication")]
        public flow[] getHROAFlowInfo([System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] string tableName, [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] string tableColumn, [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] string columnValue) {
            object[] results = this.Invoke("getHROAFlowInfo", new object[] {
                        tableName,
                        tableColumn,
                        columnValue});
            return ((flow[])(results[0]));
        }
    5.接口调用

    IManuOrderServiceService proxy = new IManuOrderServiceService();
    //指定SoapHeader验证
    proxy.Authentication = new Authentication("W9nQcVGTynQnTewCcLYuGShAjhDjpoanKs4ON0");
    var a = proxy.getManuOrderInfo("20170505-0030");
    Console.WriteLine(a);


  • 相关阅读:
    Scrapy 概览笔记
    Python 依赖版本控制 (requirements.txt 文件生成和使用)
    Python 虚拟空间的使用
    macOS 所有版本 JDK 安装指南 (with Homebrew)
    鉴权那些事
    Java 位运算符和 int 类型的实现
    ASP.NET Core 入门教程 5、ASP.NET Core MVC 视图传值入门
    如何做好一次知识或技术分享
    ASP.NET Core 入门教程 4、ASP.NET Core MVC控制器入门
    ASP.NET Core 入门教程 3、ASP.NET Core MVC路由入门
  • 原文地址:https://www.cnblogs.com/neso520/p/12491259.html
Copyright © 2011-2022 走看看