为什么在SharePoint 2010迁移后此文件写入失败?

时间:2011-10-04 07:33:55

标签: c# sharepoint sharepoint-2010 sharepoint-workflow

我将我的MOSS 2007应用程序(带有自定义批准工作流程)迁移到Sharepoint 2010.我有这个通用的代码来记录数据

private void WriteToLog(String logInfo)
{
    SPSecurity.RunWithElevatedPrivileges(delegate()
    {
        File.AppendAllText(LOG_FILE_PATH + string.Format("{0:" + LOG_FILE_FORMAT + "}", DateTime.Now) + ".log", logInfo);
    });
}

我已经完成了数据库分离升级,在以前的环境中有正在运行的工作流程(进行中状态),这应该在sharepoint 2010中继续。但不幸的是,这种情况不会发生,我的复制器活动引发了错误。我在sharepoint日志

中找到了这个
  

System.IO.IOException:设备尚未就绪。
    在System.IO ._ Error.WinIOError(Int32 errorCode,String maybeFullP ath)
    at System.IO.FileStream.Init(String p ath,FileMode mode,FileAccess access,Int32 rights,Boolean useRights,FileShare share,Int32 bufferSize,FileOptions options,SECURITY
atTRIBUTES sec attrs,String msgP ath,Boolean bFromProxy)
    在System.IO.FileStream..ctor(String p ath,FileMode模式,FileAccess访问,FileShare共享,Int32 bufferSize,FileOptions选项,字符串msgP ath,布尔bFromProxy)
    在System.IO.FileStream..ctor(String p ath,FileMode模式,FileAccess访问,FileShare共享,Int32 bufferSize,FileOptions选项)
    在System.IO.StreamWriter..ctor(String p ath,Boolean append,Encoding encoding,Int32 bufferSize)
    在System.IO.StreamWriter..ctor(String p ath,Boolean append,Encoding encoding)
    在System.IO.File.AppendAllText(String p ath,String contents,Encoding encoding)
    在xyz.Utils.MailNotific ations.DisplayClass1._0()
    在Microsoft.SharePoint.SPSecurity.DisplayClass4._2()
    在Microsoft.SharePoint.Utilities.SecurityContext.RunAsProcess(CodeToRunElev ated secureCode)
    在Microsoft.SharePoint.SPSecurity.RunWithElev atedPrivileges(WaitCallback secureCode,Object param)
    在Microsoft.SharePoint.SPSecurity.RunWithElev atedPrivileges(CodeToRunElev ated secureCode)
    at xyz.Utils.MailNotific ations.WriteToLog(String logInfo)
    在xyz.Utils.MailNotific ations.SPNotific ation(SPWeb应用程序,字符串主题,字符串批准者,字符串htmlBody)
    at xyz.WF.Approval.ApprovalWorkFlow.logError_ExecuteCode(Object sender,EventArgs e)
    在System.Workflow.ComponentModel.Activity.RaiseEvent(DependencyProperty dependencyEvent,Object sender,EventArgs e)
    在System.Workflow.Activities.CodeActivity.Execute(ActivityExecutionContext executionContext)
    在System.Workflow.ComponentModel.ActivityExecutor 1.Execute(T activity, ActivityExecutionContext executionContext)
at System.Workflow.ComponentModel.ActivityExecutor
1.Execute(Activity activity,ActivityExecutionContext executionContext)
    在System.Workflow.ComponentModel.ActivityExecutorOper ation.Run(IWorkflowCoreRuntime workflowCoreRuntime)
    在System.Workflow.Runtime.Scheduler.Run()

简而言之,这似乎是IO异常。我已经共享了日志文件夹位置,排除了文件访问权限,启动新工作流时应用程序运行正常。

3 个答案:

答案 0 :(得分:5)

什么是LOG_FILE_PATH和LOG_FILE_FORMAT?

如果其中任何一个为空或以其他方式无效,则可能导致IO异常。

答案 1 :(得分:2)

如果您过于频繁地尝试引用可移动媒体,甚至可能会发生这种情况。就我而言,我试图通过DriveInfo.GetDrives()方法获取信息来显示磁盘中的剩余空间。

只要将几个字节复制到设备,就会调用代码。因此,最好检查一下情况并非如此。进行异常处理,并在准备好后获取详细信息。

答案 2 :(得分:0)

我不知道这是否相关,但是当我从命令行手动运行控制台应用程序时,我将一个控制台应用程序安排为任务并且任务一直未通过“设备未就绪”显示错误

“要运行此应用程序,首先必须安装以下版本的.NET框架之一blah blah”。

enter image description here