当前位置:编程学习 > C#/ASP.NET >>

身份认证问题Soapheader怎么加?

最近在做一接口,调用另一厂家的服务端(java写的)。对方提供的WSDL里没有身份认证这块的soap头。但是给出了如下头信息。那我在调用时怎么加入这个头?
<soapenv:Header>
<ns1:username
soapenv:actor="http://schemas.xmlsoap.org/soap/actor/nex"
soapenv:mustUnderstand="0" xsi:type="soapenc:string"
xmlns:ns1="Authorization" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
username
</ns1:username>
<ns2:password
soapenv:actor="http://schemas.xmlsoap.org/soap/actor/nex"
soapenv:mustUnderstand="0" xsi:type="soapenc:string"
xmlns:ns2="Authorization" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
password
</ns2:password>
</soapenv:Header>


对方文档描述如下:

作为客户端,应用程序代码(使用Axis的客户端编程模型来编写的)需要将用户名和密码设置到SOAPHeader中。SOAPHeaderElement的namespace约定为Authorization,localPart约定为username 和 password。

添加web引用是没有认证这块内容的,行不通。动态调用?直接读写xml?
我该怎么写我的客户端调用程序段? 
网搜过,有人遇到过同样的问题,连头内容都是一样的。估计是同一个厂家的。
但都没有看到解决的回答。 --------------------编程问答-------------------- --------------------编程问答-------------------- 就是对方提供的WSDL里没有身份认证这块的soap头。 说是程序里直接验证的。
我在调用的时候 得先通过验证 才能调用 WSDL里的方法。

没有人能解决么? --------------------编程问答-------------------- 都没人知道么?
就是对方(java开发的服务端)给了一个不带webservice 地址,访问 ?wsdl 得到的 wsdl 是没有soapheader 的。
然后对方给了一个 soapheader XML 如1楼所示,用于身份验证。
验证通过后,再调用 wsdl 里的方法上报数据。

请问[b]客户端(C#)怎么处理?[/b]
使用代理类 然后 自己往里面加 soapheader 内容? 如果是请问怎么加? 我不知道哪个加到哪里。
如果使用 WebRequest/WebResponse ,请问怎么组织出内容? soap主体内含header和body?
为什么我这样组了还是访问失败? --------------------编程问答-------------------- 写错了,是给了一个webservice地址,怎么不让编辑的。 --------------------编程问答-------------------- 你通过添加 Service Reference 生成本地代理。

然后按照类似如下的代码,添加用户名和密码

using (var client = new ServiceReference1.Service1Client())
{
    client.Headers.username = "";
    client.Headers.password = "";
    ...
}
--------------------编程问答-------------------- 你说的是 WCF ?
我用的是 VS2005,引用 wsdl 是直接通过‘添加web引用’,但对方提供的 wsdl 里没有 soapheader 信息。  只是给了 xml 描述,如最上面所示。 现在的问题 是我不知道怎么把这个 soapheader 传到服务端去验证身份。 --------------------编程问答-------------------- 在生成的代理类的调用方法上再添加如下代码
[SoapHeader("SoapHeader")]   

调用时:
demo.SoapHeader.name = "admin";  
demo.SoapHeader.password = "admin"; 
具体可以去看看我以前写的.net 访问java xfire的文章,看能否帮助您
http://blog.csdn.net/myxx520/article/details/5113634 --------------------编程问答-------------------- 如果对方文档给出的要求是
应用程序代码(使用Axis的客户端编程模型来编写的)需要将用户名和密码设置到SOAPHeader中。SOAPHeaderElement的namespace约定为Authorization,localPart约定为username 和 password。

那我在代理类里修改的内容正确么?具体如下:

    public Authorization SoapHeaderValue;

    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "Authorization")]
    [System.Xml.Serialization.XmlRootAttribute("Authorization", Namespace = "Authorization", IsNullable = false)]
    public class Authorization : SoapHeader
    {
        public string username;
        public string password;
    }

//引用Soapheader的方法上加
    [System.Web.Services.Protocols.SoapHeaderAttribute("SoapHeaderValue")]


我现在就这么做的,可为啥服务端还是认不到我传去的soapheader? 对方soapheader 头参考在楼顶。
补充:.NET技术 ,  Web Services
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,