C#访问WebService需要SOAPHeader验证的方法

这周在做一个项目需要向外部单位的一个平台推送信息,对方平台是JAVA平台开发,需要提供一个SOAP的header  合法性验证信息,否则接口返回的信息是header 为空。

谈谈我的这一周的经验总结:

第一步:生成WSDL的代理类,不要用WEB 引用的方法去调用接口。

怎么生成WSDL的代理类呢?

菜单:工具 ==》外部工具

命令行:C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\wsdl.exe

点击确定保存以后,在工具菜单里会多出一个WSDL生成代理类。

参数里 /l:cs /out:  你的WebService的接口地址,点击确定会自动生成一个代理类。

第二步:新建RequestSOAPHeader类

记住这个类一定要继承SoapHeader类,新建对方接口需要验证的SOAP 参数。

新建一个带参数的构造函数RequestSOAPHeader(string s_uid,string s_ucode)

/// <summary>
/// RequestSOAPHeader 的摘要说明
/// </summary>
public class RequestSOAPHeader:SoapHeader
{
    public string uid{ get;set; }
    public string ucode{ get;set; }

    public RequestSOAPHeader()
    {
    }

    public RequestSOAPHeader(string s_uid,string s_ucode)
    {
        this.uid = s_uid;
        this.ucode = s_ucode;
    }
}

第三步:在代理类上添加SOAPHeader的声明

public RequestSOAPHeader RequestSOAPHeader;
public partial class ReceivePubServiceImplService : System.Web.Services.Protocols.SoapHttpClientProtocol
{

    private System.Threading.SendOrPostCallback receivePublishOperationCompleted;
    public RequestSOAPHeader RequestSOAPHeader;

    /// <remarks/>
    public ReceivePubServiceImplService()
    {
        //接口地址
        this.Url = "http://xxxxxx.com/platform/services/ReceivePublishService?wsdl";
        string uid = "";
        string Password = "123456"; 

        //通过构造函数实例化 来传值
        RequestSOAPHeader = new RequestSOAPHeader(uid, ucode);

    }

    /// <remarks/>
    public event receivePubCompletedEventHandler receivePublishCompleted;

    /// <remarks/>
    [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestNamespace = "http://server.webService.com/", ResponseNamespace = "http://server.webService.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, IsNullable = true)]
    [SoapHeader("RequestSOAPHeader")]
    public string receivePub([System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable = true)] string arg0)
    {
        object[] results = this.Invoke("receivePub", new object[] {
                    arg0});
        return ((string)(results[0]));
    }

加红色的一定要添加。

最后实例化方法

ReceivePubServiceImplService t = new ReceivePubServiceImplService();

t.receivePub(str);//信息报送成功。

记住不要通过WEB引用的方法去调用接口。

原文地址:https://www.cnblogs.com/yopo/p/8320687.html

时间: 2024-11-02 01:00:24

C#访问WebService需要SOAPHeader验证的方法的相关文章

.net 客户端调用java或.net webservice进行soapheader验证

最近项目中有业务需要跨平台调用web服务,客户端和服务器之间采用非对称加密来保证数据的安全性,webservice的安全验证基于soapheader. 借此机会,顺便整理一下调用.net webservice 和 java webservice 的验证方式,记录下来. .net端web服务 1.若web服务是采用.net webservice实现,如下代码: /// </summary> [WebService(Namespace = "http://tempuri.org/&quo

C#访问Java的WebService添加SOAPHeader验证的问题

这两天做与公司OA的接口,发现C#访问Java的WebService需要提供一个SOAP的头验证信息,但是WebService的WSDL中并没有提供约定的验证信息,所以Visual Studio生成的代理类并没有发现这些内容,所以这个SOAPHeader就必须要自己组织,还遇到一个问题就是SOAP头部信息,OA那边还按照不知道什么实例添加了一个根节点没有的命名空间,这就致使SOAPHeader内容一直报传输错误,废话不多说,上两个阶段的示例. 首先,要创建一个继承自System.Web.Serv

ANDROID调用webservice带soapheader验证

最近的一个项目中调用webservice接口,需要验证soapheader,现将解决方法记录如下:(网上资料出处太多,就不做引用,原作者如看到,如有必要添加请通知) 1.先看接口 POST /webserver/ValideWebService.asmx HTTP/1.1 Host: IP地址 Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: "http://命名空间/Login" <

iOS UIWebView 访问https绕过证书验证的方法

@implementation NSURLRequest (NSURLRequestWithIgnoreSSL) + (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host{    return YES;} @end

【转】Spring的WebServiceTemplate访问WebService的方法及其本质原理

WebService客户端调用的本质就是将SAOP格式的XML通过通信协议发送到WebService的服务器端,然后接收服务器端返回的XML. 本文简单介绍一下如何通过Spring提供的WebServiceTemplate访问Webservice,WebServiceTemplate与调用webservice的客户端已及webservice服务器端示意图如下(图片来源于Spring in Action): 这里以SOAP over HTTP为例,开发步骤如下: 1,在Spring的配置文件中配置

android采用Ksoap2访问webservice,AndroidHttpTransport call方法异常

============问题描述============ 使用java工程以同样的方式去访问webservice没有任何问题,也返回正常的数据,但是在android中执行到call方法的时候就抛出异常,但是异常是null不能去取出正常的数据,代码如下,求各位大神指教一下 ============解决方案1============ 1.应用需要有访问网络的权限. 2. 4.0中不能再主线程中发起网络请求,这个坑我也坑了好久.

ajax的访问 WebService 的方法

转自原文 ajax的访问 WebService 的方法 如果想用ajax进行访问 首先在web.config里进行设置 添加在 <webServices> <protocols> <add name= "HttpPost" /> <add name= "HttpGet" /> </protocols> </webServices> <system.web>节点之下 这样就是可以通过u

flex 访问webservice方法及跨域问题解决

一.flex调用webserivice代码 import mx.rpc.soap.WebService; import mx.rpc.events.FaultEvent;   import mx.rpc.events.ResultEvent; private var webService:WebService; protected function getWebService():void { var ws:WebService = new WebService(); //ws.wsdl= "h

C#静态调用带有SoapHeader验证的WebServices

转自:http://blog.csdn.net/u012995964/article/details/54562111 本文记录带有SoapHeader验证的WebServices服务创建.部署及C#中的静态调用方法,基于 Windows8.1.Visual Studio 2013.IIS8 环境实现. WebServices服务创建 Visual Studio 2013中创建WebServices 创建一个空的 ASP.NET Web 应用程序 : 创建 WebService 服务的程序(as