如何自定义SOAP头

wang945 2009-04-04 02:35:31
我需要自定义如下的SOAP头,请问该如何来做.
<SOAP-ENV:Header>
<comm3:RequestSOAPHeader>
<spId>18100020</spId>
<spPassword>2E6B3A4AB55D19718AD91B5BD8A0023B</spPassword>
<timeStamp />
<productId>118100020010000000008</productId>
<linkId>01231231234443344323</linkId>
<OA>tel:02765359677</OA>
<multicastMessaging>false</multicastMessaging>
</comm3:RequestSOAPHeader>
</SOAP-ENV:Header>
...全文
204 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
much0726 2009-04-13
  • 打赏
  • 举报
回复
http://blog.csdn.net/much0726/archive/2008/09/17/2943364.aspx
说明下
<SOAP-ENV:Header>
<comm3:RequestSOAPHeader>
<spId>18100020 </spId>
<spPassword>2E6B3A4AB55D19718AD91B5BD8A0023B </spPassword>
<timeStamp />
<productId>118100020010000000008 </productId>
<linkId>01231231234443344323 </linkId>
<OA>tel:02765359677 </OA>
<multicastMessaging>false </multicastMessaging>
</comm3:RequestSOAPHeader>
</SOAP-ENV:Header>
comm3是你的命名空间,在添加hoapheader时候添加下命名空间即可。

我写的例子有引用WSE3.0的,你需要的格式没有,所以导入WSE的步骤可以直接省略。

<spId>18100020 </spId>
<spPassword>2E6B3A4AB55D19718AD91B5BD8A0023B </spPassword>
<timeStamp />
<productId>118100020010000000008 </productId>
<linkId>01231231234443344323 </linkId>
<OA>tel:02765359677 </OA>
<multicastMessaging>false </multicastMessaging>
以上这些节点都作为成员写在这个类中就可以了:
public class RequestSOAPHeader : System.Web.Services.Protocols.SoapHeader
{
//public string otherheader;
}
无天 2009-04-13
  • 打赏
  • 举报
回复
友情帮顶!
wang945 2009-04-09
  • 打赏
  • 举报
回复
再顶一下
q815337127 2009-04-07
  • 打赏
  • 举报
回复
不是很了解 支持下哈
wang945 2009-04-07
  • 打赏
  • 举报
回复
自己顶一下,不让它沉了.高手帮忙啊.
wang945 2009-04-04
  • 打赏
  • 举报
回复
首先,我不是服务端,我是客户端。其次,6楼你这种方法能定义出如下的SOAP头吗?我想你是没看清要求的格式。
<SOAP-ENV:Header>
<comm3:RequestSOAPHeader>
<spId>18100020 </spId>
<spPassword>2E6B3A4AB55D19718AD91B5BD8A0023B </spPassword>
<timeStamp />
<productId>118100020010000000008 </productId>
<linkId>01231231234443344323 </linkId>
<OA>tel:02765359677 </OA>
<multicastMessaging>false </multicastMessaging>
</comm3:RequestSOAPHeader>
</SOAP-ENV:Header>
zzxap 2009-04-04
  • 打赏
  • 举报
回复
http://hi.baidu.com/alby/blog/item/987f90524d01900d0cf3e3d4.html
zzxap 2009-04-04
  • 打赏
  • 举报
回复
作者在例程中自定义了一个标记authenticationtoken来存放唯一标识注册用户身份的信息,通过对一个从SoapHeader继承下来的类AuthenticationHeader的处理,将标记信息添加到用户向服务器提交的SOAP认证消息的头部,形成了如下的消息格式:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Header>
<AuthenticationHeader
xmlns="http://www.xmlforasp.net">
<AuthenticationToken>
a49d0f16-8880-45f3-99dd-434eb640ecfa
</AuthenticationToken>
</AuthenticationHeader>
</soap:Header>
<soap:Body>
<GetAccountDetails
xmlns="http://www.xmlforasp.net">
<accountID>123456789</accountID>
</GetAccountDetails>
</soap:Body>
</soap:Envelope>

然后,在Web Services端,在Web Method中添加一个对SoapHeader属性扩展的引用:
[WebMethod]
//Header only used as input to a Web Method
[SoapHeader("AuthHeader", Direction=SoapHeaderDirection.In,
Required=true)]
public Account GetAccountDetails(int accountID) {
。。。
Account ad = new Account(accountID,AuthHeader.AuthenticationToken);
。。。
}

将一个SoapHeader属性类(即中括号中的部分)与一个WebMethod(即GetAccountDetails)关联起来,目的是为了用SoapHeader类(即AuthHeader)获取提交请求的SOAP消息中的头信息,得到标识用户的AuthenticationToken的值(AuthHeader.AuthenticationToken),并进一步处理进行身份验证!

这里只是简单介绍了如何自定义SOAP头消息,其实SOAP消息的其他部分也都可以自己灵活定义,处理框架大致一样,只是使用的属性类有所区别。理论上SOAP消息可以定义成任何有效的XML格式^_^

我将作者提供的原代码进行了修改,形成了两个单独项目,结构层次分明,一个是实现身份验证的Web Services——SoapHeaderDemoWebService,一个是实现用户登陆的客户端——SoapHeaderClient,它将访问Web Services。

先将我提供的文件http://www.downsky.net/ut/attach/2002/10/28/558996-SoapHeaderDemo.rar解压后的两个目录拷到Inetpub\wwwroot下,然后在SQL Server中建个数据库SoapHeaderTest,在Query Analyzer中执行SoapHeaderDemoWebService目录下的脚本文件SOAPHeaders.sql,最后浏览:
http://localhost/SoapHeaderClient/SoapHeaderDemoClient.aspx
可看到运行效果!当然前提是安装了.Net环境!

另外,可以直接在
http://www.xmlforasp.net/CodeBank/WebServices/SOAPHeaders/SoapHeaderDemoClient.aspx 看到这个例子!
wang945 2009-04-04
  • 打赏
  • 举报
回复
感谢4楼的回复,但是你给的答案不是我要的.你那种方法产生的SOAP头如下:
<soap:Header>
<AuthenticationHeader
xmlns="http://www.xmlforasp.net">
<AuthenticationToken>
a49d0f16-8880-45f3-99dd-434eb640ecfa
</AuthenticationToken>
</AuthenticationHeader>
</soap:Header>
问题现在已经很明显示了,第一个不对是.<SOAP-ENV:Header>与<soap:Header>的区别,第二个不对是<comm3:RequestSOAPHeader>与<AuthenticationHeader xmln="http://www.xmlforasp.net">的区别,虽然名称可以改,但是没法做到前面加了comm3的标识.
wuyq11 2009-04-04
  • 打赏
  • 举报
回复
http://blog.csdn.net/abedon/archive/2002/10/29/3921.aspx
http://www.cnblogs.com/abedon/articles/47482.html
wang945 2009-04-04
  • 打赏
  • 举报
回复
服务端是JAVA+AXSI2生成的,我是要在代理类中修改这个SOAP头.
wang945 2009-04-04
  • 打赏
  • 举报
回复
服务端是JAVA+AXSI2生成的,我是要在代理类中修改这个SOAP头.
  • 打赏
  • 举报
回复
不会 帮顶

12,162

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 Web Services
社区管理员
  • Web Services社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧