Проблема, с которой вы столкнулись, состоит в том, что asmx и WCF являются технологиями веб-службы * code-first . Это означает, что вы, как правило, начинаете с классов, а стек веб-служб заботится о том, чтобы ваши типы передавались в виде XML по проводам.
Вы начинаете со схемы, которая не является кодом. Поэтому, если вы хотите использовать asmx / wcf, вам нужно смоделировать свою схему в коде. Вы можете сделать это, выведя структуру класса из вашей схемы, используя xsd.exe (или svcutil.exe для WCF).
В качестве альтернативы вы можете моделировать свои классы вручную на основе определения схемы.
Когда у вас есть классы, вы можете добавить в код декларативные атрибуты (см. http://msdn.microsoft.com/en-us/library/83y7df3e.aspx для asmx, DataContract и DataMember для WCF). Эти атрибуты управляют:
- как десериализуется входящий поток XML в тип при получении запроса на обслуживание, и
- как экземпляры ваших типов ответов сериализуются в XML при передаче из вашего сервиса
Проблема с этим подходом состоит в том, что получение XML-кода для проверки на соответствие вашим схемам XSD будет немного хитом, поскольку вы не можете полагаться на 100% на вывод классов из XSD, и, кроме того, вы можете пропустить некоторые мелкие детали, если вы моделируем это вручную.
Каким бы способом вы это ни делали, вам нужно убедиться, что ваши экземпляры классов запросов и ответов чисто сериализованы в XML, который будет проверяться на соответствие заданным вами схемам XSD.
Также обратите внимание на среду под названием WSCF-Blue, которая позволяет создавать сначала веб-сервисов по контракту: http://wscfblue.codeplex.com/
Удачи, если вам нужно больше подробностей об этом, пожалуйста, дайте мне знать через комментарий.