#c# #asp.net
#c# #asp.net
Вопрос:
Я пытаюсь протестировать возможное приложение. Это ASP.net сайт, который будет получать XML-файлы на своей странице по умолчанию. Клиент будет прикладной программой, которая сгенерирует HTTP-сообщение, содержащее файл.
Пользовательский интерфейс не задействован.
Я создал прототип Asp.Net Веб-приложение (Framework 4.5.2) и приложение Winform для его реализации.
Я перепробовал все способы размещения кода HTTP в приложении Winform, но, хотя веб-приложение default.aspx получает удар, я не могу получить доступ к полезной нагрузке.
Это включает в себя:
-
тестовое приложение считывает файл и отправляет строку. Программа StreamReader на веб-странице выдает пустую строку при чтении запроса.Входной поток.
-
Веб-клиент.Попытка загрузки файла. Запрос.Коллекция файлов пуста.
Используя Postman и POST с параметрами, сценарий StreamReader работает. т.е. Тело файла: «opennode Это узел closenode» выдает вывод строки xml.
Я должен упомянуть, что в настоящее время я использую IDE для размещения веб-страницы на случай, если это как-то повлияет на поведение.
Учитывая требование автоматической передачи между приложением и сайтом, каков правильный способ решения этой проблемы?
Обычно я бы создал веб-сервис, но пользователь веб-сайта считает это излишним и просто хочет указать URL-адрес с файлом.
Ниже приведен код приложения для попытки WebClient.
private void OpenFile(string _file)
{
// WEBCLIENT TRY
using (WebClient client = new WebClient())
{
client.UploadFile("http://localhost:21726/Default.aspx", _file);
}
}
ASP.NET КОД «Получение веб-клиента» выглядит следующим образом
private void ProcessData(HttpRequest request)
{
try
{
// WEB CLIENT RECEIVE ATTEMPT
foreach (string f in Request.Files.AllKeys)
{
HttpPostedFile file = Request.Files[f];
file.SaveAs("c:\inetpub\test\UploadedFiles\" file.FileName);
}
catch (Exception ex)
{
string message = ex.Message;
throw;
}
}
Веб-страница изменена на образец кода из Microsoft Webclient.Пример загрузки файла (ниже).
Никаких изменений в поведении.
Так что это должен быть тестер WinApp.
<%@ Import Namespace="System"%>
<%@ Import Namespace="System.IO"%>
<%@ Import Namespace="System.Net"%>
<%@ Import NameSpace="System.Web"%>
<Script language="C#" runat=server>
void Page_Load(object sender, EventArgs e) {
foreach(string f in Request.Files.AllKeys) {
HttpPostedFile file = Request.Files[f];
file.SaveAs("c:\inetpub\test\UploadedFiles\" file.FileName);
}
}
</Script>
<html>
<head></head>
<body>
<p> Upload complete. </p>
</body>
</html>
Комментарии:
1. Вы должны добавить некоторый код, в котором он не работает, вместе с конкретными вопросами об этом. Без предоставленного кода вам трудно помочь (не написав все это самостоятельно)
2. Фрагменты кода добавлены для попытки Webclient, поскольку это предпочтительное решение.
Ответ №1:
Проблема была двоякой: Веб-приложение отображается нормально в среде IDE, выдавая признак отсутствия файлов в контейнере RequestFiles, расположенном выше. Как только я опубликовал в локальном IIS, он начал возвращать ошибку 500 тестовому клиенту WinApp. Это мы проследили до прав доступа к каталогу (забавно, что). Мы беспечно пытались выполнить запись в местоположение за пределами сайта.
Итак, добавлен подкаталог загрузки на сайт и установлены полные разрешения. Затем изменил код записи файла на :
foreach(string f in Request.Files.AllKeys)
{
//File.Create(@"C:test1.txt");
HttpPostedFile file = Request.Files[f];
file.SaveAs(Server.MapPath("~/Upload/") file.FileName);
}
Теперь все работает.