问题描述
编写了一个接口提供平板调用,在本地测试是没有问题的,可以生成txt文件,但是更新到客户服务器却没有生成txt文件,但又没有报错。好怪,自己怀疑是使用了线程导致的?对线程不了解,第一次使用!WebServiceMethod.SyncComInfo这个方法用来获取Json,数据量较大执行比较久,然而使用了线程。///<summary>同步企业信息(包括相关的证书信息)///编码字段:Wat_ComInfo:Com_Des,Com_Brand;Wat_BreedWay:Bre_ProductType,Bre_OtherDes///</summary>///<paramname="AreaCode">行政区号</param>///<returns></returns>[WebMethod]publicstringSyncComInfo(stringAreaCode){SyncCompanyInfoyci=newSyncCompanyInfo();returnyci.SaveComInfoToTXT(AreaCode);}
usingSystem;usingSystem.Data;usingSystem.Configuration;usingSystem.Linq;usingSystem.Web;usingSystem.Web.Security;usingSystem.Web.UI;usingSystem.Web.UI.HtmlControls;usingSystem.Web.UI.WebControls;usingSystem.Web.UI.WebControls.WebParts;usingSystem.Xml.Linq;usingSystem.IO;usingSystem.Collections.Generic;usingMMFrame;usingFrameWork;usingFrameWork.Components;usingFrameWork.Facade;usingSystem.Xml;usingSystem.Runtime.Serialization.Json;usingSystem.Web.Script.Serialization;usingSystem.Collections;usingSystem.Text;usingSystem.Diagnostics;usingSystem.Threading;///<summary>///SyncComInfo的摘要说明///</summary>publicclassSyncCompanyInfo{publicSyncCompanyInfo(){////TODO:在此处添加构造函数逻辑//}publicstringSaveComInfoToTXT(stringAreaCode){stringGUID=Common.GetGUID;stringDir=System.Web.HttpContext.Current.Server.MapPath(Common.UpLoadDir);stringtxtDir=Common.CreateDirectory(Dir,"SyncComInfo\"+GUID);System.Threading.Threadt=newSystem.Threading.Thread(()=>{WriteComInfoToTXT(AreaCode,txtDir);});t.IsBackground=true;t.Start();return"Public/SyncComInfo/"+GUID;}///<summary>企业信息写入TXT文件//////</summary>///<paramname="AreaCode"></param>///<returns></returns>publicvoidWriteComInfoToTXT(stringAreaCode,stringtxtDir){//try//{StreamWritersr=null;StreamWritersw=null;stringstrJson="";stringtxtPath="";if(!string.IsNullOrEmpty(AreaCode)){StringBuildersbSQL=newStringBuilder();sbSQL.AppendLine("selectValueIDfromSys_FieldValue");sbSQL.AppendLine("whereV_F_Key='ProvinceCityZoneKey'andV_ParValueID='922'");sbSQL.AppendLine("andV_Code='"+AreaCode+"'");intrecordCount=0;DataTabledt=newDataTable();dt=BusinessSystem.getDataList(sbSQL.ToString(),outrecordCount).Tables[0];if(recordCount>0){//市级stringvalueId=dt.Rows[0]["ValueID"].ToString();sbSQL=newStringBuilder();sbSQL.AppendLine("selectV_CodefromSys_FieldValue");sbSQL.AppendLine("whereV_F_Key='ProvinceCityZoneKey'andV_ParValueID='"+valueId+"'");recordCount=0;dt=newDataTable();dt=BusinessSystem.getDataList(sbSQL.ToString(),outrecordCount).Tables[0];for(inti=0;i<recordCount;i++){stringcode=dt.Rows[i]["V_Code"].ToString();txtPath=txtDir+"\"+code+".txt";strJson=WebServiceMethod.SyncComInfo(code);StreamWritersrA=File.CreateText(txtPath);srA.Close();//写入TXTStreamWriterswA=newStreamWriter(txtPath,false,System.Text.Encoding.Default);swA.WriteLine(strJson);swA.Close();}}else{//区县级txtPath=txtDir+"\"+AreaCode+".txt";strJson=WebServiceMethod.SyncComInfo(AreaCode);sr=File.CreateText(txtPath);sr.Close();//写入TXTsw=newStreamWriter(txtPath,false,System.Text.Encoding.Default);sw.WriteLine(strJson);sw.Close();}//创建一个txt文件,用于平板判断Json是否生成完成stringtxtIsFinish=txtDir+"\"+"IsFinish.txt";StreamWritersrF=File.CreateText(txtIsFinish);srF.Close();StreamWriterswF=newStreamWriter(txtIsFinish,false,System.Text.Encoding.Default);swF.WriteLine("HelloWorld.");swF.Close();}//}//catch(Exceptionex)//{//result="False|"+ex.Message;//FileTxtLogs.WriteLog("同步企业信息("+AreaCode+")出错!提示:"+ex.Message);//}}}
解决方案
解决方案二:
新创建的线程好像默认是IIS的权限。你看看IIS是不是有对应文件夹的修改权限
解决方案三:
恢复WriteComInfoToTXT的trycatch,新启线程发生异常,不会影响到主线程的。
解决方案四:
没生成文件应该是因为没有权限
解决方案五:
第一,个人认为你不必建多线程第二,建议你查查权限,是否该目录有足够的写入权限,如果别人的服务器不让你调,,可以试试写到自己的数据库来判断是否成功执行。
解决方案六:
1)有可能是你的目录配置错误了,生成的不知那个目录下去了2)先把多线程去掉,如果有错,你就可以在IE上看到了(否则就是你说的,不报错)