WCF-REST IEndpointBehavior 对Service 监控 用户访问验证
2013-05-24 21:27
501 查看
在Host_Opening 中添加 Endpoint
RestEndpointBehavior.cs
RestServiceOperationSelector.cs
private void Host_Opening(object sender, EventArgs e) { ServiceHost host = sender as ServiceHost; if (host == null) { return; } foreach (var endpoint in host.Description.Endpoints) { //添加用户访问Service 进行 监控,优先级高于 RestServiceBehavior RestEndpointBehavior b1 = endpoint.Behaviors.Find<RestEndpointBehavior>(); if (b1 == null) { endpoint.Behaviors.Add(new RestEndpointBehavior()); } } }
RestEndpointBehavior.cs
namespace H.Utility.WCF { using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel.Description; using System.ServiceModel.Channels; using System.ServiceModel.Dispatcher; using System.ServiceModel.Configuration; /// <summary> /// 在服务端的Endpoint级别注入新的IDispatchOperationSelector,以便根据客户端发起的HTTP Request的Method来修改WCF消息的HttpRequestMessageProperty的Method /// </summary> public class RestEndpointBehavior : IEndpointBehavior { public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters) { } public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime) { } public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher) { endpointDispatcher.DispatchRuntime.OperationSelector = new RestServiceOperationSelector(endpointDispatcher.DispatchRuntime.OperationSelector); } public void Validate(ServiceEndpoint endpoint) { } } }
RestServiceOperationSelector.cs
namespace H.Utility.WCF { using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel.Dispatcher; using System.ServiceModel.Channels; using System.ServiceModel.Description; using System.ServiceModel; using System.Xml; using H.BizEntity; /// <summary> /// 客户端调用Service 方法时会启动,优先级高于 IServiceBehavior /// </summary> public class RestServiceOperationSelector : IDispatchOperationSelector { private IDispatchOperationSelector m_Operation; public RestServiceOperationSelector(IDispatchOperationSelector endpoint) { m_Operation = endpoint; } public string SelectOperation(ref Message message) { HttpRequestMessageProperty httpRequest = message.Properties[HttpRequestMessageProperty.Name] as HttpRequestMessageProperty; //用户信息验证失败 //记录用户请求信息日志.. if (true) { throw new BizException("未经授权访问.."); } return m_Operation.SelectOperation(ref message); } } }
相关文章推荐
- WCF-REST IServiceBehavior 对Service 监控 用户访问验证/异常处理...
- 【REST】在 WCF RESTfull service 中实现自己的身份验证方式
- WCF 构建REST Service 跨域访问解决方法
- II7添加应用程序测试时 无法验证对路径(c:\test\WcfService)的访问
- Difference between WCF and Web API and WCF REST and Web Service
- Silverlight访问WebService/WCF的Crossdomain(跨域操作)以及调试
- 关于WEB Service&WCF&WebApi实现身份验证之WCF篇(1)
- 使用Userlock监控用户访问 增强学校网络安全
- jit 调试失败,出现以下错误:拒绝访问。jit调试由用户帐户"NT AUTHORITY\NETWORK SERVICE" 启动
- 关于WEB Service&WCF&WebApi实现身份验证之WEB Service篇
- 使用“成员资格管理用户”以及“Forms 身份验证提供程序”保护需要授权才能访问的资源
- System.UnauthorizedAccessException: 拒绝访问 temp 目录。用来运行 XmlSerializer 的标识“NT AUTHORITY\NETWORK SERVICE”没有访问 temp 目录的足够权限。CodeDom 将使用进程正在使用的用户帐户进行编译,这样,如
- 我们一起学习WCF 第三篇头消息验证用户身份
- WCF技术剖析之二十四: ServiceDebugBehavior服务行为是如何实现异常的传播的?
- android loginDemo +WebService用户登录验证
- Android多用户系列:跨用户启动(绑定)Service、启动Activity、访问ContentProvider
- WebService、WcfService和WcfRestService数据包的格式总结
- 【转】JSP 页面访问用户验证
- Windows Azure Cloud Service (18) 基于Input Endpoint通过Worker Role发布WCF服务
- 为Druid监控配置访问权限(配置访问监控信息的用户与密码)