/// <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); }