Мне было любопытно, как я выполнил бы следующие действия с помощью webservices:
Кто-то упомянул в предыдущем посте, что я должен использовать веб-сервис. Кажется, я не могу найти никаких ресурсов, объясняющих, как начать что-то подобное. Все простые примеры, похоже, просто показывают, как вы можете обслуживать XML с учетом запроса.
Я хочу знать, как принять материал, а также, как это будет отличаться от элемента управления загрузкой на аутентифицированной веб-странице. Я не думаю, что действительно понимаю веб-сервисы и их преимущества.
Как пользователь отправит интерфейс XML файла с моим веб-сервисом?
Веб-служба не подходит для отправки произвольного файла. Это можно сделать, но если это единственная причина для создания веб-службы, вы можете просто придерживаться HTTP.
Если файл имеет определенный формат или конкретное содержимое, вам может понадобиться создать для него веб-службу. Цель веб-службы ASMX или WCF заключается в обеспечении возможности обнаружения и сильной типизации данных (помимо всего прочего, но я придерживаюсь основ на данный момент). С точки зрения клиента, вместо того, чтобы пытаться создать какой-то уродливый XML или CSV blob и выталкивать его по HTTP, вы используете фактический прокси-сервер службы с классами POCO:
MyService service = new MyService();
MyData data = new MyData() { ID = 3, Name = "Test", Date = DateTime.Now };
service.Save(data);
Visual Studio (и эквивалентные инструменты в Java и некоторых других платформах) позаботится о создании прокси для вас, так что действительно все, что вам нужно сделать, это написать приведенный выше код.
Но если вы просто пытаетесь отправить какие-либо данные, это никуда не приведет, потому что вы не можете создать прокси для raw XML. Ну, вы можете, но это будет просто XmlDocument
, и это ничего не делает с точки зрения удобства использования, безопасности или обнаружения.
Не путайте "XML" в "XML Web Service". Это не инструмент для отправки вокруг ванильного XML. Скорее, XML относится к формату сообщения, поскольку он передается по проводу, в отличие от строки POST
(id=3&name=Test&date=2010-01-24
) или двоичного вызова RPC, используемого в .NET Remoting.
В терминах аутентификации, если вы решите использовать WCF, вам просто нужно использовать правовое связывание. Прокси-сервер WCF обычно настроен по умолчанию для использования wsHttpBinding
, который использует встроенную проверку подлинности Windows для защиты сообщений. Опять же, если вы используете Visual Studio, все это делается автоматически автоматически, если вы не решите изменить настройки по умолчанию.
Если вы хотите делать большие загрузки файлов, веб-служба может вызвать некоторые проблемы, поскольку на некоторых платформах веб-сервисов (включая .NET) установлены настройки по умолчанию, ограничивающие размер данных. Преимущество веб-службы заключается в том, что она выполняет все сопоставление запроса с/из XML, поэтому вы можете вернуть .NET-тип и не нужно гадать с параметрами запроса обработки. Однако вам, возможно, придется приложить больше усилий для сохранения состояния и т.д. Для логинов, что вы можете сделать, есть функция входа, которая возвращает какой-то идентификатор, который может использоваться для проверки пользователя как действительного для этого сеанса - одним из способов сделать это является наличие столбцов в вашей пользовательской таблице для lastActive и sessionGUID, и когда они регистрируются, вы создаете новый sessionGUID и возвращаете это, а на этом и любом другом действительном запросе они заставляют вас обновлять lastActive, а если запрос слишком длинный после lastActive времени, то вы отказываетесь от запроса... существует любое количество подобных способов, но, надеюсь, вы получите общую идею - вы не хотите каждый раз запрашивать данные для входа, но вы можете создать временный идентификатор и использовать его. Для принятия XML файла вы хотите использовать что-то вроде XDocument или XMLReader для чтения данных, которые вы получаете. Предполагая, что вы не говорите о разборе XML-формата, который использует сам веб-сервис, скорее всего, вы получите строку, а затем переместите ее в XDocument, а затем с помощью стандартных функций XDocument для обработки данных. Если документ будет большим, то XMLReader должен быть более эффективным. Для чтения CSV файла есть некоторые (бесплатные и несвободные) CSV-ридеры, которые помогают избежать некоторых проблем, которые могут возникнуть, предоставляя вам хороший API для обработки строки или строк CSV-данных. Если вы знаете, что исходные данные не содержат неструктурных запятых, вы можете просто взять строку и разбить ее запятыми, а затем разделите любые кавычки вокруг значений. Это, как правило, очень слабое, если могут быть адреса или другие данные, которые могут иметь запятые. XML должен быть легко передан через веб-службу - он должен быть закодирован и декодирован, поэтому затем соответствующие строки передаются.
Как для хранения в базе данных, существует несколько способов сделать это: вы можете использовать ADO.NET для хранения вещей в базе данных без дополнительных библиотек, вы можете создать структуру базы данных в Visual Studio или SQL Server Management Studio а затем использовать SQLMetal или Linq to SQL для генерации классов для сохранения данных, вы можете использовать сторонний инструмент сопоставления базы данных (например, Castle ActiveRecord) или что-то еще. Это зависит от того, что вы знаете и насколько вы готовы учиться. Это действительно отдельный веб-сервис. Когда вы определяете веб-службу в .NET, вы эффективно определяете стандартные функции с атрибутами, обозначающими их как веб-службы, поэтому сторона базы данных является стандартным материалом базы данных .NET, который не обязательно отличается от того, что вы сделали бы для веб-сайта ASP.NET, или даже настольную программу.