.net SoapHeader验证
.net SoapHeader验证
在工作中经常用到webservice,在.net 开发中经常用到webservice,在java开发经常用到cxf.
今天闲置没事就介绍下 .net webservice中常用到 soapheader token验证和重载。当然在正常使用中不太建议使用重载。
下面的列表概述接收和处理 SOAP 标头的基本步骤:
创建一个从 SoapHeader 派生的类,表示传入 SOAP 标头的数据。

- using System.Web.Services.Protocols;
- namespace WService
- {
- /// <summary>
- /// Fireran
- /// </summary>
- public class MySoapHeader : SoapHeader
- {
- public MySoapHeader()
- {
- }
- /// <summary>
- /// username
- /// </summary>
- public string UserName { get; set; }
- /// <summary>
- /// ip
- /// </summary>
- public string Ip { get; set; }
- /// <summary>
- /// token
- /// </summary>
- public string Token { get; set; }
- }
- }

2. XML Web services 方法将 myHeader 成员指定为 MemberName 属性,接收 XML Web services 方法的 MyHeader SOAP 标头的内容。

- private MySoapHeader _mySoapHeader;
- public MySoapHeader mySoapHeader
- {
- get { return _mySoapHeader; }
- set { _mySoapHeader = value; }
- }
[WebMethod]- [SoapHeader("mySoapHeader")]
- public string GetSayHello(long id)
- {
- string result = "";
- if (mySoapHeader==null)
- {
- result = "token is nulll";
- }
- else
- {
- if (mySoapHeader.Token.Equals("123456"))
- {
- result = "hello world" + id;
- }
- else
- {
- result = "token is err";
- }
- }
- return result;
- }

3. 发布webservice 利用wsdl 工具生成代理类

- //------------------------------------------------------------------------------
- // <auto-generated>
- // 此代码由工具生成。
- // 运行时版本:2.0.50727.5466
- //
- // 对此文件的更改可能会导致不正确的行为,并且如果
- // 重新生成代码,这些更改将会丢失。
- // </auto-generated>
- //------------------------------------------------------------------------------
- using System;
- using System.ComponentModel;
- using System.Diagnostics;
- using System.Web.Services;
- using System.Web.Services.Protocols;
- using System.Xml.Serialization;
- //
- // 此源代码由 wsdl 自动生成, Version=2.0.50727.3038。
- //
- /// <remarks/>
- [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
- [System.Diagnostics.DebuggerStepThroughAttribute()]
- [System.ComponentModel.DesignerCategoryAttribute("code")]
- [System.Web.Services.WebServiceBindingAttribute(Name="FireRanSoap", Namespace="http://fireran.org/")]
- public partial class FireRan : System.Web.Services.Protocols.SoapHttpClientProtocol {
- private System.Threading.SendOrPostCallback HelloWorldOperationCompleted;
- private MySoapHeader mySoapHeaderValueField;
- private System.Threading.SendOrPostCallback GetSayHelloOperationCompleted;
- private System.Threading.SendOrPostCallback GetSayHello1OperationCompleted;
- /// <remarks/>
- public FireRan() {this.Url = "http://localhost:54540/FireRan.asmx";
- }
- public MySoapHeader MySoapHeaderValue {
- get {
- return this.mySoapHeaderValueField;
- }
- set {
- this.mySoapHeaderValueField = value;
- }
- }
- /// <remarks/>
- public event HelloWorldCompletedEventHandler HelloWorldCompleted;
- /// <remarks/>
- public event GetSayHelloCompletedEventHandler GetSayHelloCompleted;
- /// <remarks/>
- public event GetSayHello1CompletedEventHandler GetSayHello1Completed;
- /// <remarks/>
- [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://fireran.org/HelloWorld", RequestNamespace="http://fireran.org/", ResponseNamespace="http://fireran.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
- public string HelloWorld() {
- object[] results = this.Invoke("HelloWorld", new object[0]);
- return ((string)(results[0]));
- }
- /// <remarks/>
- public System.IAsyncResult BeginHelloWorld(System.AsyncCallback callback, object asyncState) {
- return this.BeginInvoke("HelloWorld", new object[0], callback, asyncState);
- }
- /// <remarks/>
- public string EndHelloWorld(System.IAsyncResult asyncResult) {
- object[] results = this.EndInvoke(asyncResult);
- return ((string)(results[0]));
- }
- /// <remarks/>
- public void HelloWorldAsync() {
- this.HelloWorldAsync(null);
- }
- /// <remarks/>
- public void HelloWorldAsync(object userState) {
- if ((this.HelloWorldOperationCompleted == null)) {
- this.HelloWorldOperationCompleted = new System.Threading.SendOrPostCallback(this.OnHelloWorldOperationCompleted);
- }
- this.InvokeAsync("HelloWorld", new object[0], this.HelloWorldOperationCompleted, userState);
- }
- private void OnHelloWorldOperationCompleted(object arg) {
- if ((this.HelloWorldCompleted != null)) {
- System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
- this.HelloWorldCompleted(this, new HelloWorldCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
- }
- }
- /// <remarks/>
- [System.Web.Services.Protocols.SoapHeaderAttribute("MySoapHeaderValue")]
- [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://fireran.org/SayHello", RequestElementName="SayHello", RequestNamespace="http://fireran.org/", ResponseElementName="SayHelloResponse", ResponseNamespace="http://fireran.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
- [return: System.Xml.Serialization.XmlElementAttribute("SayHelloResult")]
- public string GetSayHello(long id) {
- object[] results = this.Invoke("GetSayHello", new object[] {
- id});
- return ((string)(results[0]));
- }
- /// <remarks/>
- public System.IAsyncResult BeginGetSayHello(long id, System.AsyncCallback callback, object asyncState) {
- return this.BeginInvoke("GetSayHello", new object[] {
- id}, callback, asyncState);
- }
- /// <remarks/>
- public string EndGetSayHello(System.IAsyncResult asyncResult) {
- object[] results = this.EndInvoke(asyncResult);
- return ((string)(results[0]));
- }
- /// <remarks/>
- public void GetSayHelloAsync(long id) {
- this.GetSayHelloAsync(id, null);
- }
- /// <remarks/>
- public void GetSayHelloAsync(long id, object userState) {
- if ((this.GetSayHelloOperationCompleted == null)) {
- this.GetSayHelloOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetSayHelloOperationCompleted);
- }
- this.InvokeAsync("GetSayHello", new object[] {
- id}, this.GetSayHelloOperationCompleted, userState);
- }
- private void OnGetSayHelloOperationCompleted(object arg) {
- if ((this.GetSayHelloCompleted != null)) {
- System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
- this.GetSayHelloCompleted(this, new GetSayHelloCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
- }
- }
- /// <remarks/>
- [System.Web.Services.Protocols.SoapHeaderAttribute("MySoapHeaderValue")]
- [System.Web.Services.WebMethodAttribute(MessageName="GetSayHello1")]
- [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://fireran.org/SayHello1", RequestElementName="SayHello1", RequestNamespace="http://fireran.org/", ResponseElementName="SayHello1Response", ResponseNamespace="http://fireran.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
- [return: System.Xml.Serialization.XmlElementAttribute("SayHello1Result")]
- public string GetSayHello(int id, int name) {
- object[] results = this.Invoke("GetSayHello1", new object[] {
- id,
- name});
- return ((string)(results[0]));
- }
- /// <remarks/>
- public System.IAsyncResult BeginGetSayHello1(int id, int name, System.AsyncCallback callback, object asyncState) {
- return this.BeginInvoke("GetSayHello1", new object[] {
- id,
- name}, callback, asyncState);
- }
- /// <remarks/>
- public string EndGetSayHello1(System.IAsyncResult asyncResult) {
- object[] results = this.EndInvoke(asyncResult);
- return ((string)(results[0]));
- }
- /// <remarks/>
- public void GetSayHello1Async(int id, int name) {
- this.GetSayHello1Async(id, name, null);
- }
- /// <remarks/>
- public void GetSayHello1Async(int id, int name, object userState) {
- if ((this.GetSayHello1OperationCompleted == null)) {
- this.GetSayHello1OperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetSayHello1OperationCompleted);
- }
- this.InvokeAsync("GetSayHello1", new object[] {
- id,
- name}, this.GetSayHello1OperationCompleted, userState);
- }
- private void OnGetSayHello1OperationCompleted(object arg) {
- if ((this.GetSayHello1Completed != null)) {
- System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
- this.GetSayHello1Completed(this, new GetSayHello1CompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
- }
- }
- /// <remarks/>
- public new void CancelAsync(object userState) {
- base.CancelAsync(userState);
- }
- }
- /// <remarks/>
- [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
- [System.SerializableAttribute()]
- [System.Diagnostics.DebuggerStepThroughAttribute()]
- [System.ComponentModel.DesignerCategoryAttribute("code")]
- [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://fireran.org/")]
- [System.Xml.Serialization.XmlRootAttribute(Namespace="http://fireran.org/", IsNullable=false)]
- public partial class MySoapHeader : System.Web.Services.Protocols.SoapHeader {
- private string userNameField;
- private string passWordField;
- private string tokenField;
- private System.Xml.XmlAttribute[] anyAttrField;
- /// <remarks/>
- public string UserName {
- get {
- return this.userNameField;
- }
- set {
- this.userNameField = value;
- }
- }
- /// <remarks/>
- public string PassWord {
- get {
- return this.passWordField;
- }
- set {
- this.passWordField = value;
- }
- }
- /// <remarks/>
- public string Token {
- get {
- return this.tokenField;
- }
- set {
- this.tokenField = value;
- }
- }
- /// <remarks/>
- [System.Xml.Serialization.XmlAnyAttributeAttribute()]
- public System.Xml.XmlAttribute[] AnyAttr {
- get {
- return this.anyAttrField;
- }
- set {
- this.anyAttrField = value;
- }
- }
- }
- /// <remarks/>
- [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
- public delegate void HelloWorldCompletedEventHandler(object sender, HelloWorldCompletedEventArgs e);
- /// <remarks/>
- [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
- [System.Diagnostics.DebuggerStepThroughAttribute()]
- [System.ComponentModel.DesignerCategoryAttribute("code")]
- public partial class HelloWorldCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
- private object[] results;
- internal HelloWorldCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
- base(exception, cancelled, userState) {
- this.results = results;
- }
- /// <remarks/>
- public string Result {
- get {
- this.RaiseExceptionIfNecessary();
- return ((string)(this.results[0]));
- }
- }
- }
- /// <remarks/>
- [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
- public delegate void GetSayHelloCompletedEventHandler(object sender, GetSayHelloCompletedEventArgs e);
- /// <remarks/>
- [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
- [System.Diagnostics.DebuggerStepThroughAttribute()]
- [System.ComponentModel.DesignerCategoryAttribute("code")]
- public partial class GetSayHelloCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
- private object[] results;
- internal GetSayHelloCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
- base(exception, cancelled, userState) {
- this.results = results;
- }
- /// <remarks/>
- public string Result {
- get {
- this.RaiseExceptionIfNecessary();
- return ((string)(this.results[0]));
- }
- }
- }
- /// <remarks/>
- [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
- public delegate void GetSayHello1CompletedEventHandler(object sender, GetSayHello1CompletedEventArgs e);
- /// <remarks/>
- [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
- [System.Diagnostics.DebuggerStepThroughAttribute()]
- [System.ComponentModel.DesignerCategoryAttribute("code")]
- public partial class GetSayHello1CompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
- private object[] results;
- internal GetSayHello1CompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
- base(exception, cancelled, userState) {
- this.results = results;
- }
- /// <remarks/>
- public string Result {
- get {
- this.RaiseExceptionIfNecessary();
- return ((string)(this.results[0]));
- }
- }
- }

4. 在代理类中添加 token 信息 修改代理类中的构造方法 如下

public FireRan() {
MySoapHeaderValue = new MySoapHeader();
this.MySoapHeaderValue.Token = "123456";
this.Url = "http://localhost:54540/FireRan.asmx";
}

5. 添加测试类进行测试

- [TestFixture]
- public class FireRanTest
- {
- [Test]
- public void Read()
- {
- using(FireRan fireRan = new FireRan())
- {
- Console.Write(fireRan.GetSayHello(1));
- }
- }
- }

6. 运行结果
在项目中为了服务安全对token和ip进行授权是很有必要的。但是在项目中有发现token 和 ip 很难精确的控制服务的访问。建议在实际开发中可以根据自己业务添加动态的验证方式,和每个业务独立的业务类型。这样可以更加精确的控制访问着的访问权限和权限降级。
.net SoapHeader验证的更多相关文章
- C#访问Java的WebService添加SOAPHeader验证的问题
原文:C#访问Java的WebService添加SOAPHeader验证的问题 这两天做与公司OA的接口,发现C#访问Java的WebService需要提供一个SOAP的头验证信息,但是WebServ ...
- C#调用Java的WebService添加SOAPHeader验证(2)
C#调用Java的WebService添加SOAPHeader验证 上一篇链接如上,更像是 Net下采用GET/POST/SOAP方式动态调用WebService的简易灵活方法(C#) 来处理xml, ...
- C#调用Java的WebService添加SOAPHeader验证
C#调用Java的WebService添加SOAPHeader验证(2) 1.问题描述 调用的Java的webservice string Invoke(string func, string req ...
- .net 客户端调用java或.net webservice进行soapheader验证
.net 客户端调用java或.net webservice进行soapheader验证 最近项目中有业务需要跨平台调用web服务,客户端和服务器之间采用非对称加密来保证数据的安全性,webservi ...
- C#动态调用带有SoapHeader验证的WebServices
http://blog.csdn.net/u012995964/article/details/54573143 本文记录C#中通过反射动态的调用带有SoapHeader验证的WebServices服 ...
- C#静态调用带有SoapHeader验证的WebServices
转自:http://blog.csdn.net/u012995964/article/details/54562111 本文记录带有SoapHeader验证的WebServices服务创建.部署及C# ...
- ANDROID调用webservice带soapheader验证
最近的一个项目中调用webservice接口,需要验证soapheader,现将解决方法记录如下:(网上资料出处太多,就不做引用,原作者如看到,如有必要添加请通知) 1.先看接口 POST /webs ...
- Webservice加上SoapHeader验证方式
提供一种基于SoapHeader的自定义验证方式,代码如下: public class MySoapHeader : System.Web.Services.Protocols.SoapHeader ...
- webservice 第一节 .net SoapHeader验证
在工作中经常用到webservice,在.net 开发中经常用到webservice,在java开发经常用到cxf. 今天闲置没事就介绍下 .net webservice中常用到 soapheader ...
随机推荐
- Msgbox消息框
于"自"<软件开发工具>一本书有这样的制剂,让我回忆--程序员可以做,让用户做:它允许用户做的少,即使是那些谁需要做的程序设置.我们应该做的. 这不是宣言.该是践行. ...
- 深入理解C指针之六:指针和结构体
原文:深入理解C指针之六:指针和结构体 C的结构体可以用来表示数据结构的元素,比如链表的节点,指针是把这些元素连接到一起的纽带. 结构体增强了数组等集合的实用性,每个结构体可以包含多个字段.如果不用结 ...
- Objective-c中的单例
单例是指静态分配的实例,就是只开辟一块内存,不会重新开辟内存,而 iphone sdk 中全是这种实例,例如[UIApplication sharedApplication] 返回一个指向代表应用程序 ...
- 如何使用Visual Studio 2013 开发PHP5.6项目
原文如何使用Visual Studio开发PHP项目 在windows下开发php除了记事本 DW 以及一帮Zend studio,Eclipse,NetBeans之流以外,个人感觉还是vsiual ...
- 在windows下用C语言写socket通讯实例
原文:在windows下用C语言写socket通讯实例 From:Microsoft Dev Center #undef UNICODE #define WIN32_LEAN_AND_MEAN #in ...
- php soap调用asp.net webservice
原文:php soap调用asp.net webservice 首先做一下准备工作,找到安装环境里的php.ini把;extension=php_soap.dll去掉前面的;.我这里使用的是wamp, ...
- QT中出现“无法解析的外部符号”错误
串口中我要把奇偶校验等enum数据对应写到一个ComboBox中去,所以需要在我的Settings类中加入一个函数用来转换. 这里,我首先在settings.h的class Settings中加上对该 ...
- ser2net使用
在ubuntu下或者openwrt下安装了ser2net程序之后,可以将串口中的数据转发为以太网数据. 设置在/etc/ser2net.conf中最后: 3002:0:/dv/ttyUSB0:1152 ...
- JQUERY简写案例
源代码: <script ttype="text/javascript"> $(function(){ $(".btn").eq(0).click( ...
- html5 音频和视频(audio And video)
1.音频和视频 Web 上的视频 直到现在,仍然不存在一项旨在网页上显示视频的标准. 今天,大多数视频是通过插件(比如 Flash)来显示的.然而,并非所有浏览器都拥有同样的插件. HTML5 规定 ...