2013-08-02 3 views
2

Цель, которую я имею, проста: из веб-приложения запишите в папку на диске D локального сервера. Когда я запускаю код локально (в отладчике), он красиво записывает в папку. Когда я публикую код на веб-сервере, он не может видеть свой собственный диск D или общую папку. Я пробовал каждую перестановку строки пути файла, которую я могу себе представить, включая абсурдные.Исключение Directory Not Found при развертывании на сервере

Примеры:

filepath = "\\\\wsbliwad\\d\\Payroll\\PaperlessPay"; 
filepath = "\\wsbliwad\\d\\Payroll\\PaperlessPay"; 
filepath = "\\wsbliwad\d\Payroll\PaperlessPay"; 
filepath = "\\\\wsbliwad\\Payroll\\PaperlessPay"; 
filepath = "\\wsbliwad\Payroll\PaperlessPay"; 
filepath = @"\\wsbliwad\payroll\PaperlessPay"; 
filepath = @"\\\\wsbliwad\\payroll\\PaperlessPay"; 
filepath = @"\\wsbliwad\\payroll\\PaperlessPay"; 
filepath = @"\\wsbliwad\d\Payroll\PaperlessPay" 

... и множество других.

Использование response.write заявления, чтобы получить ощущение того, что происходит, если я запускаю код локально, я получаю обратную связь:

Path one = \\wsbliwad\payroll\PaperlessPay 
Exists = True 
Path two = \\wsbliwad\\payroll\\PaperlessPay 
Exists = True 
Path one = \\\\wsbliwad\\payroll\\PaperlessPay 
Exists = True 
Host Name is CPU1476 
AD User is ANVILCORP\DGray 

И файл записывает в папку.

Когда я раскрываю тот же код, я получаю результат неудовлетворительную:

Path one = \\wsbliwad\payroll\PaperlessPay 
Exists = False 
Path two = \\wsbliwad\\payroll\\PaperlessPay 
Exists = False 
Path one = \\\\wsbliwad\\payroll\\PaperlessPay 
Exists = False 
Host Name is WSBLIWAD 
AD User is ANVILCORP\dgray 

Файл не записывается.

Я перешел в папку и явно предоставил разрешения на запись всем пользователям нашей группы, которые в ней нуждаются, думая, что это была проблема с сообщением о разрешении. Нет такой удачи.

Одна из особенностей, отмеченная мной, заключается в том, что последняя строка в моем ответе.write дает мне буквы верхнего регистра для пользователя домена, когда я запускаю его в отладчике, и строчные буквы при развертывании кода. Я не знаю, что это должно иметь значение, но это кажется странным.

Любые идеи, почему код может видеть общую папку из моего отладчика, но не при развертывании?

Для запроса DJ Kraze'S ниже:

protected void btn_Export_Click(object sender, EventArgs e) 
{ 

    DateTime mCheckDate = DateTime.Parse(tb_CheckDate.Text); 
    int mPeriod = Int32.Parse(tb_Period.Text); 


    try 
    { 
     string checkDateFormat = "MM/dd/yyyy"; 
     ReadOnlyCollection<IDataRow> dataRows = FlatFileExportWeb.PaperlessPay.GetPaperlessPayData(mPeriod.ToString(), mCheckDate.ToString(checkDateFormat)); 

     if (dataRows == null) 
      return; 

     IDataFormat format = new SimpleDataFormat(dataRows); 

     string filepath = ""; 
     string machineName = System.Net.Dns.GetHostName();    
     if (machineName == "WSBLIWAD") 
     { 
      // This path does not work 
      filepath = @"\\wsbliwad\d$\Payroll\PaperlessPay"; 
     } 
     else 
     { 
      // this path works when debugging 
      filepath = @"\\wsbliwad\payroll\PaperlessPay"; 
     } 

     string filename = "PaperlessPay" + mCheckDate.ToString("MMddyyyy") + ".txt"; 

     new FileGenerator(filepath, filename).BuildFile(format); 
     Response.Write("<br />&nbsp;&nbsp;&nbsp;Success!! The flat file has been written to " + filepath + @"\" + filename); 
    } 
    catch (Exception ex) 
    { 
     // Display any exceptions that may have been thrown. 
     System.Web.HttpContext.Current.Response.Write(ex); 
    } 
} 

... а потом ...

// Absolute path with concatenated filename 
string mFilenameWithPath; 

/// <summary> 
/// Constructs a FileGenerator instance pointing to filepath\PaperlessPay\filename. 
/// Will delete pre-existing file at this location. 
/// </summary> 
public FileGenerator(string filepath, string filename) 
{ 
    if (!Directory.Exists(filepath)) 
     throw new DirectoryNotFoundException(filepath); 

    mFilenameWithPath = filepath + @"\" + filename; 

    if (File.Exists(mFilenameWithPath)) 
     File.Delete(mFilenameWithPath); 
} 


/// <summary> 
/// Given an IDataFormat instance, BuildFile builds an output string. 
/// It will then write this output string to the file specified within 
/// the class, as passed into the constructor. 
/// </summary> 
/// <param name="format"></param> 
public void BuildFile(IDataFormat format) 
{ 
    // Make sure the format exists 
    if (format == null) 
     return; 

    // Collect output string, and 
    // write the string to filepath. 
    using (StreamWriter writer = File.CreateText(mFilenameWithPath)) 
     writer.Write(format.Build()); 
} 
+0

Какой пользователь выполняет IIS как на целевом сервере? –

+0

При использовании путей каталогов по сети вам нужно использовать '$' в вашем пути к файлу, например '\ имя_сервера \ c $ \ имя_папки \' имя_сервера \ имя_применения \ имя_папки ', что имеет смысл, если вы делаете это с помощью веб-приложения вы должны посмотреть на «MapServerPath» – MethodMan

+1

@DJKRAZE Не для названных акций, вы этого не делаете; это только для административных долей C :, D :, и т. д. «$» просто означает, что он скрыт от любого браузера. –

ответ

1

Traxs верен. Это действительно оказалось проблемой с разрешениями. Мы взаимодействуем с двумя системами и создали учетную запись домена Interface.Dev. Этот пользователь был указан в свойствах безопасности с разрешениями на запись, но по какой-то причине необходим полный контроль, а не запись.

Спасибо Traxs за то, что настойчиво указал мне на этот путь. Сообщение об ошибке было TERRIBLY вводящим в заблуждение, и я бы продолжил борьбу с информацией о пути в течение вечности в противном случае.

3

Вы пробовали

@"\\wsbliwad\d$\Payroll\PaperlessPay" 

?

+0

Нет, и это было отличное предложение. К сожалению, я все еще получаю DirectoryNotFoundException. – DJGray

+1

Hrm - Это звучит как проблема с разрешением. Пользователь IIS работает, так как не имеет разрешения на эту папку. – traxs

+0

Traxs, у меня тоже была эта мысль, поэтому я упомянул выше, что я явно предоставил разрешение пяти людям, которым нужен доступ к этим папкам. Это было избыточно, потому что они уже находятся в группах AD, и у групп есть права на запись в папку. Казалось бы, я получаю другое сообщение об ошибке, но опять же, я пытаюсь все, что только могу себе представить, чтобы заставить это работать, и разрешения были одной из вещей, которые я себе представлял ... – DJGray

1

Возможно, это связано с тем, что у вас нет доступа на запись к этому пути.

Смежные вопросы