Ejemplo n.º 1
0
        /// <summary>
        /// 绑定WCF服务
        /// </summary>
        /// <param name="objectType">对象类型</param>
        /// <param name="interfaceType">接口或相关类型</param>
        /// <param name="ipaddress">绑定IP地址</param>
        /// <param name="port">绑定端口</param>
        /// <param name="servermark">当前类型标识</param>
        public void StartServerBind(Type objectType, Type interfaceType, WCFManager.WCFBindingType wcftype, string ipaddress, int port, string servermark)
        {
            var serverurl = string.Format("{0}://{1}:{2}", WCFManager.GetWcfAddressMark(wcftype), ipaddress, port) + "/" + servermark;

            serverurl = serverurl.ToLower().Trim();
            //如果已经绑定过..则直接返回
            if (BindedWcfServers.ContainsKey(serverurl))
            {
                //关闭已存在的服务
                var hosttmp = BindedWcfServers[serverurl];
                hosttmp.Close();
                BindedWcfServers.Remove(serverurl);
            }

            ServiceHost host = new ServiceHost(objectType, new Uri(string.Format("{0}://{1}:{2}", WCFManager.GetWcfAddressMark(wcftype), ipaddress, port)));

            BindedWcfServers.Add(serverurl, host);//记录

            host.AddServiceEndpoint(interfaceType, WCFManager.CreateBinding(wcftype), servermark);

            if (host.Description.Behaviors.Find <ServiceMetadataBehavior>() == null)
            {
                ServiceMetadataBehavior metadata = new ServiceMetadataBehavior();
                host.Description.Behaviors.Add(metadata);
            }

            host.Open();
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 绑定WCF服务
        /// </summary>
        /// <param name="objpath">对象的文件路径</param>
        /// <param name="objclass">类名</param>
        /// <param name="interfacepath">接口或其它路径</param>
        /// <param name="interfacename">接口或其它类名</param>
        /// <param name="wcftype">WCF类型</param>
        /// <param name="ipaddress">IP地址</param>
        /// <param name="port">端口</param>
        /// <param name="servermark">服务标识</param>
        public void StartServerBind(string objpath, string objclass, string interfacepath, string interfacename,
                                    WCFManager.WCFBindingType wcftype, string ipaddress, int port, string servermark)
        {
            var objtype       = DoNet.Common.Reflection.ClassHelper.GetClassType(objpath, objclass);
            var interfacetype = DoNet.Common.Reflection.ClassHelper.GetClassType(interfacepath, interfacename);

            StartServerBind(objtype, interfacetype, wcftype, ipaddress, port, servermark);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 绑定WCF服务
        /// </summary>
        /// <param name="objdata"></param>
        /// <param name="objclass"></param>
        /// <param name="interfacedata"></param>
        /// <param name="interfacename"></param>
        /// <param name="wcftype"></param>
        /// <param name="ipaddress"></param>
        /// <param name="port"></param>
        /// <param name="servermark"></param>
        public void StartServerBind(byte[] objdata, string objclass, string interfacename,
                                    WCFManager.WCFBindingType wcftype, string ipaddress, int port, string servermark)
        {
            var ass           = System.Reflection.Assembly.Load(objdata);
            var objtype       = ass.GetType(objclass);
            var interfacttype = ass.GetType(interfacename);

            StartServerBind(objtype, interfacttype, wcftype, ipaddress, port, servermark);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 关闭信道
        /// </summary>
        /// <param name="wcftype"></param>
        /// <param name="ip"></param>
        /// <param name="port"></param>
        /// <param name="mark"></param>
        public void CloseChannel(WCFManager.WCFBindingType wcftype, string ip, int port, string mark)
        {
            var url = string.Format("{0}://{1}:{2}", WCFManager.GetWcfAddressMark(wcftype), ip, port) + "/" + mark;

            url = url.ToLower().Trim();
            if (_channelfactorys.ContainsKey(url))
            {
                _channelfactorys[url].Close();
                _channelfactorys.Remove(url);
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 注册回调
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="instance"></param>
        /// <param name="wcftype"></param>
        /// <param name="ip"></param>
        /// <param name="port"></param>
        /// <param name="mark"></param>
        public void RegisterCallbackObject <T>(object instance, WCFManager.WCFBindingType wcftype, string ip, int port, string mark)
        {
            var url = string.Format("{0}://{1}:{2}", WCFManager.GetWcfAddressMark(wcftype), ip, port) + "/" + mark;

            url = url.ToLower().Trim();
            if (_channelfactorys.ContainsKey(url))
            {
                var channel = _channelfactorys[url] as DuplexChannelFactory <T>;

                var ctx   = new InstanceContext(instance);
                var proxy = channel.CreateChannel(ctx);
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 生成远程代理对象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="wcftype"></param>
        /// <param name="ip"></param>
        /// <param name="port"></param>
        /// <param name="mark"></param>
        /// <returns></returns>
        public T CreateRemoteObject <T>(WCFManager.WCFBindingType wcftype, string ip, int port, string mark, TimeSpan timeout, object callback = null)
        {
            var binding = WCFManager.CreateBinding(wcftype);

            binding.ReceiveTimeout = timeout;
            var url = string.Format("{0}://{1}:{2}", WCFManager.GetWcfAddressMark(wcftype), ip, port) + "/" + mark;

            url = url.ToLower().Trim();
            if (_channelfactorys.ContainsKey(url))
            {
                if (_channelfactorys[url].State == CommunicationState.Opened)
                {
                    try
                    {
                        _channelfactorys[url].Close();
                    }
                    catch { }
                }
                _channelfactorys.Remove(url);
                _channelproxys.Remove(url);
            }
            if (callback == null)
            {
                var channelFactory = new ChannelFactory <T>(binding, url);

                var proxy = channelFactory.CreateChannel();
                _channelfactorys.Add(url, channelFactory);
                _channelproxys.Add(url, proxy);
                return(proxy);
            }
            else
            {
                var ctx            = new InstanceContext(callback);
                var channelFactory = new DuplexChannelFactory <T>(ctx, binding, url);
                var proxy          = channelFactory.CreateChannel();
                _channelfactorys.Add(url, channelFactory);
                _channelproxys.Add(url, proxy);
                return(proxy);
            }
        }