Exemple #1
0
        /// <summary>
        /// 创建 同名的多个 wcf通道
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="serviceName"></param>
        /// <returns></returns>
        public static List <T> CreateChannelList <T>(SiteEnum.SiteService serviceName)
        {
            List <T> list = new List <T>();

            string            mapPath  = System.Web.HttpContext.Current.Server.MapPath("~/config/service.config");
            XmlDocument       doc      = new XmlDocument();
            XmlReaderSettings settings = new XmlReaderSettings();

            settings.IgnoreComments = true;//忽略文档里面的注释
            XmlReader reader = XmlReader.Create(mapPath, settings);

            doc.Load(reader);
            reader.Dispose();

            XmlNodeList    nodeList = doc.DocumentElement.ChildNodes;
            List <XmlNode> node     = new List <XmlNode>();

            for (int i = 0; i < nodeList.Count; i++)
            {
                if (nodeList[i].FirstChild.InnerText == serviceName.ToString())
                {
                    node.Add(nodeList.Item(i));
                }
            }

            string service      = string.Empty;
            string serviceUrl   = string.Empty;
            string securityMode = string.Empty;
            string servicespace = string.Empty;

            foreach (XmlNode item in node)
            {
                service      = item.SelectSingleNode("serviceName").InnerText;
                serviceUrl   = item.SelectSingleNode("serviceUrl").InnerText;
                securityMode = item.SelectSingleNode("SecurityMode").InnerText;
                servicespace = item.SelectSingleNode("servicespace").InnerText;

                ChannelFactory <T> channelFac = new ChannelFactory <T>(CreateBindding(service, SecurityMode.None, servicespace), CreateEndpoint(serviceUrl));

                //查看是否有 数据契约
                foreach (OperationDescription op in channelFac.Endpoint.Contract.Operations)
                {
                    DataContractSerializerOperationBehavior dataContractBehavior = op.Behaviors.Find <DataContractSerializerOperationBehavior>() as DataContractSerializerOperationBehavior;
                    if (dataContractBehavior != null)
                    {
                        //制定数据契约 序列化的数量
                        dataContractBehavior.MaxItemsInObjectGraph = 0x100000;
                    }
                }

                list.Add(channelFac.CreateChannel());
            }

            return(list);
        }
        /// <summary>
        /// 生成页面文件
        /// </summary>
        /// <param name="generatePath">生成文件的相对路径</param>
        /// <param name="content">生成的页面内容</param>
        /// <param name="error"></param>
        /// <returns></returns>
        private bool CreatePage(string generatePath, string content, SiteEnum.SiteService serviceName, out string error)
        {
            error = "发布完成";
            try
            {
                //string fullPath = generatePath;
                //int _index = fullPath.LastIndexOf(@"\");
                //string directoryPath = fullPath.Substring(0, _index);
                //if (!System.IO.Directory.Exists(directoryPath))
                //{
                //    System.IO.Directory.CreateDirectory(directoryPath);
                //}

                #region 无效,读取文件的时候会乱码
                //byte[] bytes = System.Text.Encoding.UTF8.GetBytes(content);
                //using (System.IO.FileStream fs = new System.IO.FileStream(fullPath, System.IO.FileMode.Create))
                //{
                //    fs.Write(bytes, 0, bytes.Length);
                //}
                #endregion

                #region 无效,本地路径发布,不能实现远程发布
                //using (System.IO.StreamWriter sw = new System.IO.StreamWriter(fullPath, false, Encoding.UTF8))
                //{
                //    sw.Write(content);
                //}
                #endregion


                List <IPublishPageService> channelList = Entity.CreateChannelList <IPublishPageService>(serviceName);
                if (channelList != null && channelList.Count > 0)
                {
                    foreach (IPublishPageService channel in channelList)
                    {
                        error += string.Format("{0} ", channel.PublishPage(generatePath, content));
                        (channel as IDisposable).Dispose();
                    }

                    return(true);
                }
                else
                {
                    error = "WCF通道创建失败,可能是没有该名称对应的服务配置项";
                    return(false);
                }
            }
            catch (Exception ex)
            {
                error = ex.Message;
                return(false);
            }
        }
        /// <summary>
        /// 生成静态页面
        /// </summary>
        /// <param name="tempFilePath">模板文件全路径</param>
        /// <param name="generatePath">生成文件相对路径</param>
        /// <param name="dic">ViewData</param>
        /// <param name="tempDic">TempData</param>
        /// <param name="context">控制器上下文</param>
        /// <returns></returns>
        private ActionResult GeneratePage(string tempFilePath, string generatePath, SiteEnum.SiteService serviceName, ViewDataDictionary dic, TempDataDictionary tempDic, ControllerContext context)
        {
            string fullPath = Server.MapPath(tempFilePath);

            if (!System.IO.File.Exists(fullPath))
            {
                return(Json(new { success = false, errors = new { text = "不存在该模板文件" } }, "text/html", JsonRequestBehavior.AllowGet));
            }
            string html = GenerateHtml(tempFilePath, dic, tempDic, context);

            string error;
            bool   isSuccess = CreatePage(generatePath, html, serviceName, out error);

            return(Json(new { success = isSuccess, errors = new { text = error } }, "text/html", JsonRequestBehavior.AllowGet));
        }
        //测试action
        public ActionResult PublishPage()
        {
            string       p_gid        = Request["p_gid"] ?? string.Empty;
            string       p_path       = Request["p_path"] ?? string.Empty;//模板绝对路径 基地址 名称
            Site_CMSPage info         = SiteServiceClass.Site_CMSPage_SelectByp_gid(p_gid);
            string       tempFilePath = info.p_tempPath;
            string       generatePath = info.p_filePath;

            //获取页面发布服务配置名称
            string siteName = Request["siteName"] ?? string.Empty;//模板绝对路径 基地址 名称

            SiteEnum.SiteService serviceName = SiteEnum.SiteService.PublishPageService;
            SiteEnum.SiteName    serviceEnum = (SiteEnum.SiteName)Enum.Parse(typeof(SiteEnum.SiteName), siteName);

            switch (serviceEnum)
            {
            case SiteEnum.SiteName.MainSite:
                serviceName = SiteEnum.SiteService.PublishPageService;
                break;

            case SiteEnum.SiteName.XiaoShuoSite:
                serviceName = SiteEnum.SiteService.PublishXiaoShuoPageService;
                break;

            case SiteEnum.SiteName.VideoSite:
                serviceName = SiteEnum.SiteService.PublishVideoPageService;
                break;

            default:
                serviceName = SiteEnum.SiteService.PublishPageService;
                break;
            }

            tempFilePath = tempFilePath.Replace("/", "\\");
            generatePath = generatePath.Replace("~", "").Replace("/", "\\");
            //查询页面下的区块数据 <路径,数据项>
            Dictionary <string, List <Site_CMSItem> > dic = new Dictionary <string, List <Site_CMSItem> >();

            Site_CMSBlocksSearchInfo search = new Site_CMSBlocksSearchInfo()
            {
                b_p_gid = p_gid
            };
            int rowCount;
            List <Site_CMSBlock> list     = SiteServiceClass.Site_CMSBlock_SelectPage(search, 1, 100, out rowCount);
            List <Site_CMSItem>  itemList = new List <Site_CMSItem>();

            Site_CMSItemSearchInfo itemSearch = null;

            foreach (Site_CMSBlock item in list)
            {
                itemSearch = new Site_CMSItemSearchInfo()
                {
                    i_status = (int)SiteEnum.SiteItemStatus.正常,
                    i_b_gid  = item.b_gid
                };

                itemList = SiteServiceClass.Site_CMSItem_SelectPage(itemSearch, 1, 100, out rowCount);
                dic.Add(item.b_path, itemList);
            }

            //获取数据,传递到页面
            ViewBag.dataList = dic;

            return(this.GeneratePage(tempFilePath, generatePath, serviceName, this.ViewData, this.TempData, this.ControllerContext));
        }
        /// <summary>
        /// 上传视频
        /// </summary>
        /// <param name="videoDatas">二进制数据</param>
        /// <param name="configName">文件保存路径配置名称</param>
        /// <param name="sizeConfig">缩略尺寸设置:尺寸设置 200*120*1 缩略为200*120 使用1号水印图片</param>
        /// <param name="imgExt">扩展名</param>
        /// <param name="thumbModel">"s",整图缩放;"c",裁剪; 默认为裁剪</param>
        /// <param name="totalSecond">视频总长度,默认剪切2min</param>
        /// <returns>原图地址(0)和缩略图地址(1)</returns>
        public static List <string> UploadVideo(byte[] videoDatas, string configName, List <string> sizeConfig, string videoExt, int totalSecond, string thumbModel = "c", SiteEnum.SiteService uploadService = SiteEnum.SiteService.UploadService)
        {
            IUploadService channel = Entity.CreateChannel <IUploadService>(uploadService);
            var            result  = channel.UploadVideo(videoDatas, configName, sizeConfig, videoExt, thumbModel, totalSecond);

            (channel as IDisposable).Dispose();
            return(result);
        }
        /// <summary>
        /// 上传图片
        /// </summary>
        /// <param name="imgDatas">二进制数据</param>
        /// <param name="configName">文件保存路径配置名称</param>
        /// <param name="sizeConfig">缩略尺寸设置:尺寸设置 200*120*1 缩略为200*120 使用1号水印图片</param>
        /// <param name="imgExt">扩展名</param>
        /// <param name="thumbModel">"s",整图缩放;"c",裁剪; 默认为裁剪</param>
        /// <returns>原图地址(0)和缩略图地址(1)</returns>
        public static List <string> UploadImg(byte[] imgDatas, string configName, List <string> sizeConfig, string imgExt, string thumbModel = "c", SiteEnum.SiteService uploadService = SiteEnum.SiteService.UploadService)
        {
            IUploadService channel = Entity.CreateChannel <IUploadService>(uploadService);
            var            result  = channel.UploadImg(imgDatas, configName, sizeConfig, imgExt, thumbModel);

            (channel as IDisposable).Dispose();
            return(result);
        }