.NET SOAP Распространенные типы - PullRequest
1 голос
/ 24 сентября 2008

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

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 27 сентября 2008

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

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

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

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

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

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

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

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