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

2

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

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

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

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

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

Теги:
web-services

2 ответа

1
Лучший ответ

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

  • 0
    ОК, это имеет больше смысла. Цель этого для меня - сказать кому-то, у меня есть веб-сервис, так вы получаете к нему доступ и отправляете данные. Тогда мяч на их площадке, чтобы получить данные для меня. С точки зрения аутентификации я хотел бы использовать аутентификацию сайтов, которая является разновидностью .NET SQL.
  • 0
    Будет ли типичный сценарий быть таким? Я делаю веб-сервис и запускаю его на своем хост-компьютере. Когда клиент хочет отправить мне данные, он ... запускает программу, которая делает запрос и отправляет данные в мой веб-сервис для каждого нового элемента, который он добавляет (программа будет циклически просматривать элементы)? Тогда у моего веб-сервиса будет какой-то тип обработчика, когда он получит элемент, который поместит его в мою базу данных SQL?
Показать ещё 2 комментария
2

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

  • 0
    +1 много хорошей информации. Я действительно просто неясен в части веб-сервиса всего этого. Как конечный пользователь с данными инициирует передачу данных? Они посещают страницу в браузере? Делать это программно? Обе? Или? А знаете ли вы о хорошем ресурсе для создания такого веб-сервиса, который мог бы помочь в этом новичку, как я?
  • 0
    Веб-сервис обычно вызывается программой. Большинство фреймворков имеют средства для создания веб-сервисов, где вы вводите URL для дескриптора веб-сервиса, а затем просто вызываете функции стандартным способом для этого языка программирования. Например, в .NET вы должны добавить веб-ссылку, ввести URL-адрес веб-службы, а затем просто стандартные вызовы функций C # / VB.NET, и то, что вы увидите в своем коде, будет .NET-типами - реализация веб-сервиса обрабатывает сериализацию клея и типа и так далее. Веб-сервис обычно не доступен из браузера.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню