организация / регулярное выражение прокси-класса .net webservice для соответствия определению класса c # - PullRequest
0 голосов
/ 09 февраля 2011

Я работаю с веб-сервисом .net, в котором есть несколько сотен методов.(У меня нет контроля над веб-сервисом, поэтому я не могу его реорганизовать).

Однако я работаю с его клиентской частью, и мне нужно генерировать прокси-класс на стороне клиента всякий раз, когда что-то меняетсяв WS.(И это меняется довольно часто).

Я создаю этот прокси-класс с помощью wsdl.exe.

wsdl.exe http://url.asmx /o:Proxy.cs /n:My.Name.Space

Этот сгенерированный прокси-класс содержит классы для возвращаемых типов, входные типы, используемые вWS.

Представьте себе этот пример:

У меня есть сборка DTO с именем My.Application.DTO.dll , которая содержит класс с именем MyDTOClass ,На эту сборку ссылаются как проект WebService, так и проект приложения Windows, который вызывает веб-сервис через прокси-класс.

Представьте, что у моего веб-сервиса есть такой метод

[WebMethod]
public MyDTOClass GetSomeDTOMethod(int id) { ... }

Теперь, когда я генерируюпрокси для этого, прокси будет содержать определение MyDTOClass .Конечно, внутри другого пространства имен.

Затем я использую прокси-класс следующим образом:

   My.Application.DTO.MyDTOClass dto;
    dto = WSProxy.GetSomeDTOMethod(x);

Это не говорит, что невозможно преобразовать WebService.Namespage.MyDTOClass в My.Application..DTO.MyDTOClass , поскольку прокси-класс имеет свое собственное определение MyDTOClass .

Если я удаляю определение класса в прокси-классе, все работает нормально.

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

Поскольку этот файл огромен, его не всегда легко.И порядок этих классов также меняется с каждым поколением.

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

  1. Каким-то образом не позволяет wsdl генерировать эти определения классов в прокси.Например, путем украшения методов некоторым атрибутом.Но не смог найти способ сделать это.
  2. Автоматизировать редактирование сгенерированного прокси-класса с помощью powershell.Я подумываю о сопоставлении всех строк, определяющих класс, используя выражение regurlar, а затем удаляю их все из файла.
  3. Получите wsdl для генерации элементов кода в предсказуемом порядке, чтобы мое редактирование стало легким

Буду очень признателен, если кто-нибудь сможет помочь мне выбраться из этой проблемы.

В настоящее время я склонен ко второму варианту.Так что, если кто-нибудь может помочь мне с регулярным выражением, соответствующим частичному определению класса c #, включая новые строки, это было бы очень полезно.(В аромате powershell regex, если не слишком много просить)

Ответы [ 2 ]

0 голосов
/ 10 февраля 2011

Если вы используете «Добавить ссылку на службу», то вы можете настроить ее на повторное использование типов во внешних сборках.Вы не можете сделать это с помощью «Добавить веб-ссылку».

0 голосов
/ 10 февраля 2011

Используя веб-сервис в Visual Studio, вы можете настроить его на повторное использование всех сборок, на которые есть ссылки, что позволит ему пропустить создание этих классов в клиенте.Все, что вам нужно сделать, это добавить новую ссылку на сервис в ваш клиентский проект.

Проверьте это видео: http://www.youtube.com/watch?v=12PGpwy8SUY

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