asp.net Hessian 服务的注册

Hessian服务端实现了IHttpHandle,

默认情况下是在Web.Config中的handles接点中注册,这样当有 很多实现时比较麻烦

这个时候可以实现IHttpHandleFactory注册到Web.Config中,在Factory中实现对具体服务的实例化,

另外也可以使用RouteTable方式,自己实现以个IRouteHandle,注册到RouteTable的Routes表中,

需要注意的是,RouteTable方式在asp.net管线的位置靠前,会屏蔽掉后面的IHttphandle方式.

另外注意在IIS 6中,需要在IIS中添加对.hessian的印射(取消确认文件存在选择),而在IIS7.0中需要在Web.Config的Web.Server配置节里注册HttpHandle或HttpHandleFactory-如果采用的不是RouteTable方式的话

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Routing;
using System.Collections.Concurrent;
using System.Reflection;
namespace PhoneAPI.Service
{
    public class HessianRouteHandle : IRouteHandler
    {
        private Lazy<ConcurrentDictionary<String, Type>> _ServiceLazy = new Lazy<ConcurrentDictionary<string, Type>>(() => {
            var dic = new ConcurrentDictionary<String, Type>();

            var assembly = Assembly.Load("F.Studio.Prime.Hessian");
            //接口类完全限定名将".I"替换成".Impl."
            //F.Studio.Prime.Hessian.Impl.AccountService 转换后如下
            //f-studio-prime-hessian-accountservice
            foreach (var type in assembly.GetTypes().ToList())
            {
                if (type.FullName.IndexOf(".Impl.") > 0 && type.FullName.EndsWith("Service"))
                {
                    var key = type.FullName.Replace(".Impl.", ".").Replace(".", "-").ToLower();
                    dic[key] = type;
                }
            }

            return dic;
        }, true);
        public IHttpHandler GetHttpHandler(RequestContext requestContext)
        {
            
            var service = requestContext.RouteData.Values["service"].ToString();
            if (_ServiceLazy.Value.ContainsKey(service))
            {
                return Activator.CreateInstance(_ServiceLazy.Value[service]) as IHttpHandler;
            }
            return null;
        }
    }
}
View Code
  void Application_Start(object sender, EventArgs e)
        {
            // 在应用程序启动时运行的代码
            RouteTable.Routes.Add(new Route("{service}.hessian", new HessianRouteHandle()));
        }
       private T GetHessionProxy<T>()
            where T : class
        {

            var url = ServerUrl + typeof(T).FullName.Replace(".I", ".").Replace(".", "-").ToLower() + ".hessian";
            return factory.Create(typeof(T), url) as T;
      

        }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值