Автоматически генерировать интерфейсы C # (с прототипами функций) из XSD? - PullRequest
1 голос
/ 13 декабря 2010

Я знаю, как определять классы / структуры данных в формате XSD и автоматически генерировать эквивалентные классы C # (с помощью xsd.exe или более сложного xsd2code.exe).

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

У меня в голове большой салат из XSD, WSDL, SOAP,ОТДЫХ и больше .. какую технологию мне использовать?

10x.

Ответы [ 2 ]

1 голос
/ 13 декабря 2010

XSD используется для определения типов данных , а не интерфейсов или протоколов. Я бы пошел на смешивание WSDL и XSD. Я имею в виду, вы создаете WSDL, который определяет интерфейсы и методы, а затем связываете аргументы этих методов с типами, определенными в XSD, внутренними или внешними по отношению к WSDL.

Образцы здесь . Как видите, logbus-management.wsdl не только включает XSD сам по себе, но также строго ссылается на пространство имен filter из logbus-filters.xsd.

Из этого WSDL вы можете использовать, в моем случае wsdl /serverInterfaces logbus-management.wsdl logbus-filters.xsd, и получить как C # interface s, так и все типы данных в одном файле исходного кода C #. Если вы также сгенерируете прокси через Visual Studio, вы можете получить SOAP. Вам может понадобиться веб-служба (например, ASP.NET, возможно, в serverless mode), но я не уверен, что вы можете запустить SOAP с удаленным взаимодействием (вам следует) или использовать WCF.

Надеюсь, я вам помог.

Последующий

Теперь вам нужно использовать Remoting, чтобы позволить процессу связаться. Здесь Я нашел учебник. Ваш скелет код должен выглядеть следующим образом:

using System;

namespace addsubs
{
    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    public class addsubs : MarshalByRefObject, IMultiplier //what you compiled from WSDL
    {
        public int product;
        public int multiply(int a, int b)
        {
            product = a * b;
            return product;
        }
    }
}

Оба приложения должны совместно использовать интерфейс IMultiplier (или любой другой), а затем , когда вы получаете ссылку на ваш каркасный объект (через локальный прокси *) 1039 *, который .NET должен создать для вас), приведите его к IMultiplier

Примечание для других пользователей

У меня нет прямого опыта работы с .NET Remoting, как я уже сказал. Пожалуйста, не отрицайте мой ответ, если то, что я только что сказал, неверно. Вместо этого, пожалуйста, помогите нашему другу достичь своей цели.

Спасибо

0 голосов
/ 06 октября 2011

Вот решение, которое я использовал в итоге: http://www.codeproject.com/KB/codegen/XSLCodeGen.aspx

...