Вопрос

Есть ли способ при создании веб-сервисов указать используемые типы?В частности, я хочу иметь возможность использовать один и тот же тип как на клиенте, так и на сервере, чтобы уменьшить дублирование кода.

Более упрощенный пример:

    public class Name
    {
        public string FirstName {get; set;}
        public string Surname { get; set; }

        public override string ToString()
        {
            return string.Concat(FirstName, " ", Surname);
        }
    }

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

Это было полезно?

Решение

Хорошо, я понимаю, что это было явным проектным решением со стороны SOAP, поэтому на самом деле вы не должны этого делать.Я нашел следующее страница это объясняет, почему:

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

Сказав, что есть еще две возможности:

  1. Создайте веб-ссылки в Visual Studio или с помощью wsdl.exe.Затем перейдите в созданный файл Reference.cs (или .vb) и явно удалите тип.Затем перенаправьте на нужный тип, расположенный в другой сборке.
  2. Вы можете совместно использовать типы между веб-службами на стороне клиента с помощью wsdl.exe и параметра /sharetypes.

Другие советы

Если вы хотите, чтобы ваш веб-сервис и ваш клиент использовали общий тип или структуру, добавьте общедоступную структуру в проект вашего веб-сервиса следующим образом:

public struct Whatever
{
    public string A;
    public int B;
}

затем добавьте в свой веб-сервис метод, который имеет эту структуру в качестве возвращаемого типа:

[WebMethod]
public Whatever GiveMeWhatever()
{
    Whatever what = new Whatever();
    what.A = "A";
    what.B = 42;
    return what;
}

После обновления веб-ссылки вашего клиента вы сможете создавать структуры типа «Что угодно» в своем клиентском приложении следующим образом:

Webreference.Whatever what = new Webreference.Whatever();
what.A = "that works?";
what.B = -1; // FILENOTFOUND

Этот метод позволяет сохранять определения любых структур, которые необходимо передавать туда и обратно, в одном месте (проект веб-сервиса).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top