Помощь: Contract First Webservices - PullRequest
0 голосов
/ 06 июля 2010

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

Я много искал и обнаружил, что мне нужно генерировать WSDL с использованием XML и XSD.Что ж, мне еще предстоит спроектировать оба, и я думаю, что это будет моим первым шагом.

Теперь меня беспокоит то, что очень трудно работать с необработанным XML, и я не владею терминологией WSDL.

Кто-нибудь может подсказать, какие шаги высокого уровня следует выполнить для создания простого WSDL с некоторой информацией о неисправностях?

Любое понимание будет полезно.

Спасибо, ребята.

Ответы [ 3 ]

0 голосов
/ 10 июля 2010

На самом деле, если вы следуете первому контракту, вы должны сначала сгенерировать свои «Сообщения».

В классических веб-сервисах вы фактически начинаете с XSD для своих запросов и ответов. Затем сгенерируйте код из XSD, чтобы гарантировать, что ваши типы данных совместимы с SOAP. К счастью, DataContractSerializer стал очень умным и позаботится о ваших типах данных.

Имея это в виду, вы должны сначала сгенерировать свой Сервисный контракт (ы) и сообщения Запрос / Ответ (Контракты с данными). Когда вы предоставляете конечную точку mex в WCF, для вас будет создан ваш WSDL. Создание собственного WSDL может быть очень сложным, и единственная причина, по которой вы должны попытаться сделать это, - это если вы действительно хотите скрыть функциональность от определенных потребителей. Даже если вы захотите сгенерировать свой собственный WSDL по этой причине, вам все равно будет проще позволить WCF создать его для вас, а затем изменить его, как вы считаете нужным.

Давайте остановимся здесь и посмотрим, есть ли у вас дополнительные вопросы.

0 голосов
/ 10 июля 2010

Моя мотивация для первых контрактных веб-сервисов состояла в том, чтобы позволить сервису и клиенту быть написанными параллельно разными разработчиками. Используя WSDL и «Добавить ссылку на службу», вы должны опубликовать службу, прежде чем писать клиент.

В качестве альтернативы, не проходите WSDL. Вы можете написать один интерфейс .NET, который используется как клиентом, так и службой. Этот класс будет генерировать прокси WCF непосредственно из интерфейса:

public interface IServiceClientFactory<TServiceInterface>
{
    void CallService(Action<TServiceInterface> action);
    TResult CallService<TResult>(Func<TServiceInterface, TResult> function);
}

public class ServiceClientFactory<TServiceInterface> :
    IServiceClientFactory<TServiceInterface>
    where TServiceInterface : class
{
    class Client : System.ServiceModel.ClientBase<TServiceInterface>
    {
        public TServiceInterface Service
        {
            get { return base.Channel; }
        }
    }

    public void CallService(Action<TServiceInterface> action)
    {
        Client client = new Client();

        try
        {
            action(client.Service);
            client.Close();
        }
        catch (Exception)
        {
            client.Abort();
            throw;
        }
    }

    public TResult CallService<TResult>(Func<TServiceInterface, TResult> function)
    {
        Client client = new Client();

        try
        {
            TResult result = function(client.Service);
            client.Close();
            return result;
        }
        catch (Exception)
        {
            client.Abort();
            throw;
        }
    }
}

Подробнее на Приключения в программном обеспечении .

0 голосов
/ 08 июля 2010

Вероятно, проще использовать WCF для создания WSDL для вас. Вам просто нужно определить ваши OperationContracts и DataContracts. Вам не нужно реализовывать операции, просто определите, что они есть в интерфейсе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...