2010-08-03 3 views
5

Итак, я работаю над проектом моей стажировки и ударил немного кирпичной стены. К сожалению, единственные люди, которых я знаю, которые могут мне помочь в офисе, сейчас в отпуске, и Google, к сожалению, бесполезен (или мои навыки поиска неадекватны), поэтому я подумал, что попрошу здесь.Вопрос о C#, серверах, XML

Проект в основном заключается в том, чтобы сделать сервер имитирующим тот, который уже имеет компания (которая делает телефонные приложения). Мне нужно сделать, чтобы одно из их приложений отправило запрос на мой сервер (мне придется изменить приложение, чтобы сделать это, но не знаю, как это сделать), и ответ моего сервера с ответом XML, что приложение уже знает, как обрабатывать. (Основная цель заключается в том, чтобы мы могли видеть, как приложение реагирует, когда реальный сервер отправляет ему ошибку, имитируя его на моем сервере.)

Теперь у меня уже есть несколько примеров HTTP-запросов и связанных с ними ответов XML. , взятый из симуляций с приложением и реальным сервером. Приложение написано на C# и в настоящее время отправляет веб-запросы HTTP в онлайн-адрес реального сервера, который отвечает на эти HTTP-запросы HTTP с помощью XML. Однако у моего сервера не будет интернет-местоположения, поэтому приложение должно быть изменено для работы с сокетами на локальном хосте.

Мои вопросы:

1) Мой босс сказал, чтобы создать файл XML, чтобы связать определенные запросы с определенными ответами XML, но я понятия не имею, что он означает, или как сделать это. (Он сказал, что это также может быть сделано с .ini-файлом.) Кто-нибудь знает?

2) Как только у меня есть этот XML-файл, который может создавать эти ассоциации, как я могу включить его на свой сервер, чтобы мой сервер мог проверить полученный запрос против его таблицы действительных запросов и выяснить, какой ответ отправить назад ?

3) Как можно изменить приложение с помощью HTTP-запросов и ответов на использование сокетов?

Если у вас есть какие-либо вопросы/разъяснения, которые вам нужны, чтобы лучше ответить на это, пожалуйста, не стесняйтесь спрашивать меня.

Спасибо!

+2

Вы считали, что просто попросили у него разъяснений? # 1 может означать много чего. –

+3

Примите это к сердцу, когда вы начинаете свое путешествие в программное обеспечение, не делайте * не * против хлеба, когда это возможно, вы будете тратить время и записывать сроки. Принимая HTTP-клиент и конвертируя его в использование сокетов, чтобы вы могли использовать сервер сокетов против зерна, естественным методом является реализация вашего сервера в контексте http. Используйте IIS для этого и службу ASMX. Еще проще, возьмите копию текущего сервера, который он запускает, и просто измените его, чтобы на все запросы были отправлены ваши сообщения. –

+0

Спросите своего босса, если сервер является веб-службой WCF или веб-сервисом ASMX или чем-то еще. Если это веб-сервис WCF, реализация которого просто стала намного проще, спросите его, где взять контракты и начать чтение учебников. –

ответ

1

Что вы описываете, это веб-сервис. К сожалению, его советы по изменению параметра в файле .ini делают его похожим на то, что у них есть собственная система для этого, вместо использования стандартного ASMX (который требует IIS) или WCF (который может запускаться в IIS или как автономный сервис, который, по вашему мнению, вам нужен).

Без дополнительной информации о том, что они используют, я не знаю, что вы сможете получить здесь большую помощь.

0

Спросите своего босса, если этот клиент связывается с мылом, если да, то просто зайдите в MSDN и найдите учебники по внедрению веб-сервиса ASMX, следуйте инструкциям, и у вас будет оболочка для начала.

1

В ответ на вопрос № 3:

HTTP является протоколом, который уже работает на определенном сокета (обычно через порт 80). Интернет-сокет - это конечная точка, которая используется для передачи данных между процессами. Если вы хотите запустить свой собственный протокол, вам нужно будет создать новый сокет (с TCP или UDP) на определенном порту.

Это, однако, потребует от вас создания собственного клиента и сервера для обмена данными между ними.

Для начала, here - очень простой пример клиент-сервер в C# с использованием специального сокета.

Удачи вам!

0

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

1) Похоже, ваш босс просто хочет легко изменить ассоциации для тестирования, не перестраивая приложение, поэтому он просит вас сохранить эти ассоциации в файле xml/ini, который можно легко изменить. В C# вы можете легко перейти между объектами XML и DataSet, поэтому это должно быть тривиально. Сначала я бы создал структуру данных в DataSet, а затем использовал метод GetXml DataSet для вывода формата xml.

2) В .NET вы можете хранить объекты в кеше и создавать зависимость кэш-памяти, которая является ассоциацией файлов. Таким образом, всякий раз, когда файл изменяется, кеш очищается. Всякий раз, когда ваша программа обрабатывает запрос, он вытаскивает объект из кеша, если объект не находится в кеше, тогда у вас есть блок условий, который перестраивает его из файла xml/ini на диске. Я бы хотел, чтобы этот блок условий вызывал функцию, которая затем загружает вышеупомянутый XML-формат в набор данных, который затем сохраняется в кэше с зависимостью кэш-памяти.

3) Если вы пытаетесь протестировать приложения i/o, изменение его для использования другого транспортного уровня звучит как плохая идея. Если приложение в настоящее время работает через HTTP для отправки запросов, просто перенаправляйте HTTP-запрос. Я подозреваю, что приложение, вероятно, имеет конфигурацию где-то, определяющую путь веб-службы, к которой он в настоящее время звонит, после того, как вы знаете, что это за путь, вы можете либо изменить его, либо если это невозможно, настройте правило DNS на сервере, на котором выполняется приложение, чтобы перенаправить его в местоположение вашего приложения. В окнах это так же просто, как добавление строки в файл hosts.