惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
T
Tailwind CSS Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
L
LangChain Blog
博客园 - 【当耐特】
I
InfoQ
腾讯CDC
人人都是产品经理
人人都是产品经理
H
Help Net Security
Y
Y Combinator Blog
B
Blog
博客园 - Franky
Microsoft Security Blog
Microsoft Security Blog
Stack Overflow Blog
Stack Overflow Blog
The Cloudflare Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
WordPress大学
WordPress大学
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园 - 叶小钗
D
Docker
博客园 - 聂微东
B
Blog RSS Feed
G
Google Developers Blog

博客园 - 晓岚

2023年最后一天:有收获有遗憾 2021年最后一晚:蛰伏的一年 2020年最后一晚:变局中的一年 2019年最后一晚:四处把抓的一年 2018年最后一小时 2017年最后一小时 2016年最后一晚上 2015年最后半小时 2014年第一小时 洛杉矶留念 2013年最后一小分钟 2012年总结&2013展望 向岁月致敬 对未来憧憬 2011年最后一小时 2010年最后一小时 2008年的最后一分钟 修改HuiHuo工序的上道工序的IFV为1 Status Code Definitions --Hypertext Transfer Protocol -- HTTP/1.1 子数组的最大和 最大子数组 Javascript中Eval函数的使用 - 晓岚 - 博客园 软件素质历练
利用客户端代理和SOAPHeader进行Webservice权限控制
晓岚 · 2008-06-01 · via 博客园 - 晓岚

一、继承客户端Reference.cs的代理类:

class CustomWSProxy:TestException.localhost.Service
    
{
        
public CustomWSProxy()
            : 
base()
        
{
            
this.InitWebServiceProxy(this);
        }


        
private void InitWebServiceProxy(TestException.localhost.Service s)
        
{
            TestException.localhost.CredentialSoapHeader header 
= new TestException.localhost.CredentialSoapHeader();
            header.UserName 
= "lanshh";
            header.UserPassword 
= "hello";

            
// 为什么更改为CredentialSoapHeaderValue
            
// s.Credentials = header;
            s.CredentialSoapHeaderValue = header;
        }

    }

二、客户端调用:

private void button2_Click(object sender, EventArgs e)
        
{
            TestException.localhost.CustomWSProxy s 
= new CustomWSProxy();
            s.MyHelloWorld(
"hello");
        }

三、Webservice端模拟:
1. SoapHeader的继承类:

///<summary>
/// CredentialSoapHeader 的摘要说明
///</summary>

public class CredentialSoapHeader : System.Web.Services.Protocols.SoapHeader
{
    
private string _userName;
    
private string _userPassword;

    
public CredentialSoapHeader()
    
{
        
//
        
// TODO: 在此处添加构造函数逻辑
        
//
    }


    
public string UserName
    
{
        
get return _userName; }
        
set { _userName = value; }
    }


    
public string UserPassword
    
{
        
get return _userPassword; }
        
set { _userPassword = value; }
    }

}

2. WebService代码(需要优化):

/// <summary> 
/// WebService 的摘要说明 
/// </summary> 

[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo 
= WsiProfiles.BasicProfile1_1)] 
public class Service : System.Web.Services.WebService 

    
private CredentialSoapHeader m_credentials; 
    
public CredentialSoapHeader Credentails 
    

        
get return m_credentials; } 
        
set { m_credentials = value; } 
    }
 

    
public Service () 

        
//如果使用设计的组件,请取消注释以下行 
        
//InitializeComponent(); 
    }
 

    [WebMethod] 
    [SoapHeader("Credentails")] 
    public string MyHelloWorld(string s) 
    

        
this.VerifyCredential(this); 
        
        
return "Hello World"
    }
 

    
//验证是否合法 
    private void VerifyCredential(Service s) 
    

        
if (s.Credentails == null || s.Credentails.UserName == null || s.Credentails.UserPassword == null
        

            
throw new SoapException("验证失败", SoapException.ClientFaultCode, "Security"); 
        }
 
        
else 
        

            
if (s.Credentails.UserName != "test" ||s.Credentails.UserPassword != "test"
            


                
throw new SoapException("用户和密码错误", SoapException.ClientFaultCode, "Security"); 
            }
 
        }
 
    }
  
}