Рекомендуется начать с XSD. Это не гарантирует совместимость с каждой стороны, поскольку XML-схема действительно велика, и ни один стек веб-служб не поддерживает все это. (Пример: списки).
Итак, начните с XSD, но ограничитесь основными типами. Примитивы, сложные типы, состоящие из примитивов, массивов одного и того же. Вы можете смело вкладывать сложные типы и массивы. (массивы сложных типов, сложные типы, которые содержат массивы или сложные типы и т. д.).
Держитесь подальше от ограничений, групп замещения, списков, дериваций и любой другой XSD-эзотерики. Следует избегать даже перечислений XSD.
О дате и времени:
Недостаточно использовать обнуляемую дату и время. Также есть проблемы с форматированием. .NET DateTime - это более высокое разрешение по сравнению с календарем Java, в результате чего отправка времени .NET на Java может привести к исключениям десериализации на стороне Java. ( РЕДАКТИРОВАТЬ: используя декоратор DataType = "dateTime" в атрибуте XmlElement на стороне .NET может убедиться, что вы сериализованы правильно)
Несколько старых советов по этому вопросу.
Наконец, неверно, что вы не можете использовать встроенный XML-документ в генерируемых классах. С частичными классами C # вы можете написать отдельный код из сгенерированных классов с нужным вам документом в коде. Даже если вы перегенерируете код, ваш частичный код класса останется неизменным. РЕДАКТИРОВАТЬ: Когда вы скомпилируете, документация появится в классах.
РЕДАКТИРОВАТЬ: Кто-то спросил, если использование XSD-first недостаточно для обеспечения взаимодействия, зачем его использовать? Мой ответ: это не гарантия, но хороший шаг, это помогает. Он удерживает вас от разработки интерфейсов в коде (либо Java, либо C #, либо VB и т. Д.), Который раскрывает специфичные для платформы вещи, такие как .NET DataSets, универсальные словари, Java ResultSets и т. Д., И все это создает проблемы взаимодействия. В более маргинальных частях XSD все еще есть подводные камни, но обычно их можно избежать с продуманным дизайном.
Я должен был упомянуть в своем первоначальном ответе, что вы можете применить итеративный процесс к разработке интерфейса. Спроектируйте в XSD, затем сгенерируйте (клиентский) заглушку и (серверный) код скелета из XSD + WSDL, затем настройте и сделайте это снова.