Я работаю с веб-сервисом .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 .
Если я удаляю определение класса в прокси-классе, все работает нормально.
Мне нужно вручную отредактировать сгенерированный прокси-класс, чтобы удалить эти повторяющиеся определения классов, чтобы он снова заработал.
Поскольку этот файл огромен, его не всегда легко.И порядок этих классов также меняется с каждым поколением.
Я пытался решить эту проблему следующими способами, но никто из них действительно не выполнил свою работу (или я не мог получить их)
- Каким-то образом не позволяет wsdl генерировать эти определения классов в прокси.Например, путем украшения методов некоторым атрибутом.Но не смог найти способ сделать это.
- Автоматизировать редактирование сгенерированного прокси-класса с помощью powershell.Я подумываю о сопоставлении всех строк, определяющих класс, используя выражение regurlar, а затем удаляю их все из файла.
- Получите wsdl для генерации элементов кода в предсказуемом порядке, чтобы мое редактирование стало легким
Буду очень признателен, если кто-нибудь сможет помочь мне выбраться из этой проблемы.
В настоящее время я склонен ко второму варианту.Так что, если кто-нибудь может помочь мне с регулярным выражением, соответствующим частичному определению класса c #, включая новые строки, это было бы очень полезно.(В аромате powershell regex, если не слишком много просить)