Почему загрузка файлов через Silverlight 2 ограничивается только файлами .TXT? - PullRequest
0 голосов
/ 17 ноября 2008

У меня есть приложение Silverlight 2, которое отправляет байтовый массив в службу WCF с поддержкой Silverlight. Однако (если я не попытаюсь загрузить файл .txt) метод SaveFile() службы никогда не будет достигнут, и я получаю ошибку: «Удаленный сервер возвратил ошибку: NotFound»

Я упускаю что-то действительно очевидное? Почему я не могу загрузить файлы .doc? Почему только .txt?

ОБНОВЛЕНИЕ: я пытался подключить отладчик для исключений CLR, но это не помогло. Я до сих пор не вижу никаких ошибок, кроме 404. Вот мой код:

в Page.xaml.cs:

OpenFileDialog dlg = new OpenFileDialog();

if (dlg.ShowDialog().Value)
{
  byte[] fileContent = new byte[dlg.File.Length];

  using (FileStream fs = dlg.File.OpenRead())
  {
    fs.Read(fileContent, 0, Convert.ToInt32(fs.Length));
    fs.Close();
  }

  Service1.Service1Client srv = new SL1.Service1.Service1Client();

  srv.SaveFileCompleted += (sender1, e1) =>
  {
    foo.Text = "Uploaded!";
  };

  srv.SaveFileAsync(dlg.File.Name, fileContent);
}

в Service1.svc.cs:

[OperationContract]
public string SaveFile(string fileName, byte[] fileContent)
{
  string ret = String.Empty;

  try
  {
    string target = @"c:\debug123\" + fileName;

    if (File.Exists(target))
    {
      File.Delete(target);
    }

    File.WriteAllBytes(target, fileContent);

    ret = "OK";
  }
  catch (Exception ex)
  {
    ret = ex.ToString();
  }

  return ret;
}

Кто-нибудь видит что-то не так с этим?

Ответы [ 4 ]

2 голосов
/ 19 ноября 2008

К вашему сведению, я разобрался в своей проблеме, и эта статья решила ее. «По умолчанию самое большое сообщение, которое может быть отправлено службе клиенту, составляет 8124 байта». Поэтому мне пришлось увеличить лимит через настройки конфигурации привязок.

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

ОБНОВЛЕНИЕ: После прочтения той же статьи я обнаружил, что служебная программа настройки службы WCF, включенная в Windows SDK, может помочь определить основную проблему.

1 голос
/ 17 ноября 2008

Нет такого ограничения.

Присоедините к сервису отладчик и проверьте, какое исключение возникло. Чтобы сделать это, вам нужно настроить Visual Studio на прерывание исключений при их обработке (в отличие от необработанных). Сделайте это в диалоговом окне «Отладка -> Исключения», установив левый флажок в строке «Общие исключения времени выполнения языка».

Подключив отладчик к сервису (Debug-> Attach to process), вы сможете увидеть реальную ошибку. Ошибка NotFound является общей ошибкой - настоящая ошибка видна только на стороне службы.

1 голос
/ 17 ноября 2008

Я не уверен, в чем конкретно проблема, но могу вам сказать, что загрузка определенно не ограничивается файлами .txt - я загрузил 10 МБ WMV-файлов без проблем Возможно, что-то с кодировкой на стороне службы вызывает проблему?

0 голосов
/ 19 ноября 2008
...