Использование FileInfo, чтобы увидеть, когда файл был обновлен ... на другом сервере - PullRequest
0 голосов
/ 23 ноября 2011

Привет, ребята. Я передаю информацию о транспортном средстве на сайт автодилера для одного из наших клиентов. Каждую ночь в полночь новый файл XML загружается на наш FTP и перезаписывает текущий. В настоящее время у него есть два идентичных веб-сайта, и файл должен быть загружен на оба, я пытался настроить его так, чтобы оба веб-сайта могли использовать один и тот же XML-файл, чтобы мы могли сократить риск ошибок и убедить.

Вытягивание файла прекрасно работает, оба веб-сайта могут читать XML-файл и не имеют проблем с отображением инвентаря. Проблема возникает, когда я пытаюсь отобразить дату последнего обновления файла. Я создал небольшой фрагмент, который считывает дату обновления файла и отображает «Последнее обновление: и дату», но когда я пытаюсь сослаться на нелокальный файл, я получаю сообщение об ошибке «Форматы URI не поддерживаются». Кто-нибудь знает, как это сделать или вообще возможно?

что это на данный момент

FileInfo fileInfo = new FileInfo(Server.MapPath("~/feed/VEHICLES.XML"));
DateTime timeOfCreation = fileInfo.LastWriteTime;

что я пробовал

FileInfo fileInfo = new FileInfo("http://www.autodealername.com/feed/VEHICLES.XML");
DateTime timeOfCreation = fileInfo.LastWriteTime;

это было нехорошо

Ответы [ 6 ]

1 голос
/ 23 ноября 2011

Это можно сделать через FTP, поскольку вы уже используете его.

http://msdn.microsoft.com/en-us/library/system.net.ftpwebresponse.lastmodified.aspx

0 голосов
/ 24 ноября 2011

Возможно, попробуйте использовать класс FileSystemWatcher, который может уведомлять вас, когда файл был изменен, изменен и т. Д. Посмотрите на него .

Удачи!

0 голосов
/ 23 ноября 2011

Вы также можете добавить обновленное поле в ленту новостей, чтобы в последний раз оно могло обновляться из самого канала.

RSS pubDate: http://www.w3schools.com/rss/rss_tag_pubdate.asp

<?xml version="1.0" encoding="ISO-8859-1" ?>
<rss version="2.0">

<channel>
  <title>W3Schools Home Page</title>
  <link>http://www.w3schools.com</link>
  <description>Free web building tutorials</description>

  <!-- YOU COULD USE THIS -->
  <pubDate>Thu, 27 Apr 2006</pubDate>

  <item>
    <title>RSS Tutorial</title>
    <link>http://www.w3schools.com/rss</link>
    <description>New RSS tutorial on W3Schools</description>
  </item>
</channel>

</rss>

Атом updated: http://www.atomenabled.org/developers/syndication/atom-format-spec.php#rfc.section.1.1

<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title>Example Feed</title> 
  <link href="http://example.org/"/>

  <!-- YOU COULD USE THIS -->
  <updated>2003-12-13T18:30:02Z</updated>

  <author> 
    <name>John Doe</name>
  </author> 
  <id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id>

  <entry>
    <title>Atom-Powered Robots Run Amok</title>
    <link href="http://example.org/2003/12/13/atom03"/>
    <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
    <updated>2003-12-13T18:30:02Z</updated>
    <summary>Some text.</summary>
  </entry>

</feed>
0 голосов
/ 23 ноября 2011

Вы можете попробовать использовать WebRequest с помощью метода HEAD и найти заголовок Last-Modified.

Вот код, который я использовал ...

var web = WebRequest.Create("http://cdn.sstatic.net/stackoverflow/img/sprites.png?v=4") as HttpWebRequest;
web.Method = "HEAD";
var response = web.GetResponse();
var lastModified = DateTime.Parse(response.Headers["last-modified"]);
Console.WriteLine(lastModified);

Вот что ответ httpвыглядит (от Fiddler) ...

HTTP/1.1 200 OK
Server: nginx/0.8.36
Date: Wed, 23 Nov 2011 17:37:44 GMT
Content-Type: image/png
Connection: keep-alive
Cache-Control: max-age=604800
Last-Modified: Tue, 06 Sep 2011 21:44:29 GMT
ETag: "6237328de6ccc1:0"
Content-Length: 19706
X-Cache: HIT
Accept-Ranges: bytes
0 голосов
/ 23 ноября 2011

если вы загружаете файл следующим образом:

FileInfo fileInfo = new FileInfo("http://www.autodealername.com /feed/VEHICLES.XML");

скорее всего, файл извлекается вам IIS или веб-сервером в этом домене / сайте, и это не то же самое, что открытие файла изнепосредственно к файловой системе.

Я думаю, что у вас есть как минимум две альтернативы:

  • открыть файл из общей сетевой папки, например \\machinename\ShareName\FileName;
  • создать службуконечная точка на удаленном сервере (веб-служба WCF или XML), которая получает имя файла и возвращает необходимую информацию;
0 голосов
/ 23 ноября 2011

FileInfo использует информацию из базовой файловой системы, которая недоступна по HTTP. Вам нужно подумать о другом пути.

...