Web Service通过SoapHeader身份验证
2013-03-22 14:58
495 查看
服务端Web Service
1、创建WebService基类,包含身份验证方法
2、WebService继承基类WebServiceBase,在要调用的方法中调用基类的验证方法
客户端WinForm
(1)添加Web Service调用:
http://localhost/HelloService/HelloService.asmx
(2)获取Web Service封装一个方法
(3)调用:
备注:
如果第一次调用Web service响应速度慢,则解决办法如下:
在配置文件中(.config)中添加配置节:
NET4.0中的默认代理是开启的,而我并没有设置!故只有等待超时后才会绕过代理,这就阻塞了.
/article/2708239.html
1、创建WebService基类,包含身份验证方法
using System; using System.Collections.Generic; using System.Web.Services.Protocols; namespace Demo.WebService { /// <summary> /// WebService基类 /// </summary> public class WebServiceBase : System.Web.Services.WebService { private CredentialSoapHeader credentials; public CredentialSoapHeader Credentials { get { if (this.credentials == null) this.credentials = new CredentialSoapHeader(); return credentials; } set { credentials = value; } } protected void VerifyCredentials() { if (this.Credentials == null || string.IsNullOrEmpty(this.Credentials.Username) || string.IsNullOrEmpty(this.Credentials.Password)) { throw new SoapException("请输入用户名或密码.", SoapException.ClientFaultCode, "用户登录"); } bool result = (this.Credentials.Username == "admin" && this.Credentials.Password == "123456"); if (result == false) { throw new SoapException("用户名或密码错误.", SoapException.ClientFaultCode, "用户登录"); } } } /// <summary> /// 用于身份验证的类 /// </summary> public class CredentialSoapHeader : SoapHeader { public string Username { get; set; } public string Password { get; set; } } }
2、WebService继承基类WebServiceBase,在要调用的方法中调用基类的验证方法
using System; using System.Collections.Generic; using System.Web; using System.Web.Services; namespace Demo.WebService { /// <summary> /// WebService1 的摘要说明 /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] public class HelloService : WebServiceBase { [WebMethod] [SoapHeader("Credentials")] public string HelloWorld() { base.VerifyCredentials(); return "Hello World"; } } }
客户端WinForm
(1)添加Web Service调用:
http://localhost/HelloService/HelloService.asmx
(2)获取Web Service封装一个方法
public class ServiceFactory { public static HelloService.HelloService GetHelloService(string username, string password) { var service = new HelloService.HelloService() { CredentialSoapHeaderValue = new HelloService.CredentialSoapHeader() { Username = username, Password = password } }; return service; } }
(3)调用:
private void button1_Click(object sender, EventArgs e) { HelloService.HelloService service = ServiceFactory.GetHelloService("admin","123456"); try { string msg = service.HelloWrold(); MessageBox.Show(msg); } catch (Exception ex) { string err = ex.Message; if (err.Contains("登陆失败")) MessageBox.Show("用户名或密码错误!"); else MessageBox.Show("登录失败,异常信息:" + err); } }
备注:
如果第一次调用Web service响应速度慢,则解决办法如下:
在配置文件中(.config)中添加配置节:
<system.net> <defaultProxy enabled="false" useDefaultCredentials="false"> <proxy/> <bypasslist/> <module/> </defaultProxy> </system.net>
NET4.0中的默认代理是开启的,而我并没有设置!故只有等待超时后才会绕过代理,这就阻塞了.
/article/2708239.html
相关文章推荐
- SMTP 服务器要求安全连接或客户端未通过身份验证。 服务器响应为: Authentication
- 利用SoapHeader验证web service调用的合法性
- sql server 2008 r2 修改sa密码 通过sql server 身份验证登陆
- form身份验证通过后,只能用FormsAuthentication.RedirectFromLoginPage
- 实现带有用户身份验证的文件传输Web Service
- Web Service 中的身份验证策略--使用自定义SOAP 标题
- SMTP 服务器要求安全连接或客户端未通过身份验证的各个解决方案(C#)
- 实现带有用户身份验证的文件传输Web Service(1)
- 如何通过使用窗体身份验证和 Visual C#.NET 对 Active Directory 验证身份
- 【转载】Java通过JDBC分别采用Windows身份验证模式和混合验证模式连接登录SQL Server2008数据库代码
- 使用SoapHeader对WebService进行身份验证
- Web Service 身份验证
- C#调用Axis2发布的带SoapHeader用户验证的WebService(通过测试)
- PB调用web service的身份验证
- C#调用Web Service时的身份验证
- 如何通过 Active Directory 使用 Forms 身份验证
- 通过加密算法实现数据的完整性、机密性及身份验证
- 通过SMTP SERVER 无需身份验证发送邮件
- form身份验证通过后,只能用FormsAuthentication.RedirectFromLoginPage
- php通过会话控制实现身份验证实例