Принять данные с помощью веб-службы C # .NET 3.5 - PullRequest
2 голосов
/ 25 января 2010

Мне было любопытно, как я мог бы сделать следующее с помощью веб-сервисов:

  1. Аутентификация пользователя.
  2. Принять файл CSV или XML.
  3. Обработайте файл и поместите его в базу данных SQL.

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

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

Как бы пользователь отправлял интерфейс XML-файла с моим веб-сервисом?

Ответы [ 2 ]

2 голосов
/ 25 января 2010

Если вы хотите выполнять загрузку больших файлов, веб-служба может вызвать некоторые проблемы, поскольку некоторые платформы веб-служб (включая .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, или даже настольная программа.

1 голос
/ 25 января 2010

Веб-сервис не подходит для отправки произвольного файла. Это можно сделать, но если это ваша единственная причина для создания веб-службы, вы можете просто придерживаться HTTP.

Если файл имеет определенный формат или конкретное содержимое , то вы можете создать для этого веб-сервис. Цель веб-службы ASMX или WCF - обеспечить возможность обнаружения и строгую типизацию данных (помимо прочего, но сейчас я придерживаюсь основ). С точки зрения клиента, вместо того, чтобы пытаться создать некрасивый блоб XML или CSV и преобразовать его через HTTP, вы используете реальный прокси-сервер службы с классами POCO:

MyService service = new MyService();
MyData data = new MyData() { ID = 3, Name = "Test", Date = DateTime.Now };
service.Save(data);

Visual Studio (и эквивалентные инструменты на Java и некоторых других платформах) позаботятся о создании прокси-сервера для вас, поэтому на самом деле все, что вам нужно сделать, это написать приведенный выше код.

Но если вы просто пытаетесь отправить любые данные, это никуда вас не приведет, потому что вы не можете сгенерировать прокси для необработанного 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, все это делается для вас автоматически, если вы не решите изменить значения по умолчанию.

...