zoukankan      html  css  js  c++  java
  • 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;
          
    
            }
  • 相关阅读:
    一条语句批量插入多条数据
    VMware Workstation 15 Pro 永久激活密钥
    windows下java项目打包、启动批处理 .bat文件
    java简写名词解释
    windows查看所有进程:netstat -ano
    Java验证jwt token
    【转载】三种方法从 HTTPS 网站导出 SSL 证书链
    使用solr将CSV/XML/DB/JSON数据发布为Rest Service
    检验多个xsd的xml是否合法
    Eclipse 打包运行maven项目
  • 原文地址:https://www.cnblogs.com/wdfrog/p/4063036.html
Copyright © 2011-2022 走看看