Пользовательский шаблон для сервисных ссылок Visual Studio? - PullRequest
4 голосов
/ 18 ноября 2009

Настройка

Я хочу использовать веб-сервис в Visual Studio. Я добавил ссылку на сервис, указав на документ WSDL. Я получаю кучу сгенерированного кода, который работает как чемпион.

Проблема

В диалоговом окне «Справочник по услугам» я выбрал «Внутренний» в качестве «Уровня доступа для сгенерированных классов». Похоже, что это ставит ключевое слово "internal" перед классом WhwhatSoapClient. Groovy. Однако всем сгенерированным модельным классам предшествуют ключевые слова public public. «Частичная» часть хороша (даже желательна), но не настолько общественная. Я хочу, чтобы эти классы тоже были внутренними.

Решение?

Конечно, Visual Studio (svcutil.exe?) Использует шаблон для генерации Reference.cs, верно? Есть ли способ изменить этот шаблон или указать альтернативный? Или я лаю не на том дереве?

Спасибо!

Я очень новичок в этом вопросе, поэтому, возможно, я плохо сформулировал вопрос.


Редактировать: В ответ на комментарий Тузо я подключаю Visual Studio к следующему:

https://sebomarketing.worldsecuresystems.com/CatalystWebService/CatalystEcommerceWebservice.asmx?WSDL.

VS генерирует внутренний класс с именем CatalystEcommerceWebserviceSoapClient, у которого есть метод с именем Catalogue_Retrieve (). Catalogue_Retrieve () возвращает объект Каталога, а Visual Studio генерирует класс Каталога как «открытый частичный». Я хочу, чтобы он был внутренним.

Вот некоторые фрагменты того, что генерируется:

internal partial class CatalystEcommerceWebsierviceSoapClient : System.ServiceModel.ClientBase<BcApi.EcommerceApi.CatalystEcommerceWebserviceSoap>, BcApi.EcommerceApi.CatalystEcommerceWebserviceSoap {
    public BcApi.EcommerceApi.Catalogue Catalogue_Retrieve(...) {
        // ...
    }
}

public partial class Catalogue : object, System.ComponentModel.INotifyPropertyChanged {
    // ...
}

И в ответ на Джейми, я знаком с шаблонами T4 благодаря SubSonic . Так что я уже немного покопался, чтобы найти ответ на эту проблему, связанный с Т4 Я мог бы, вероятно, копать немного больше, хотя. Спасибо за совет.

Ответы [ 3 ]

2 голосов
/ 10 сентября 2012

Вы не включили ни один из атрибутов, украшающих открытый класс, но я предполагаю, что если бы вы это сделали, один из атрибутов был бы:

[System.Xml.Serialization.XmlTypeAttribute(Namespace="blahblahblah")]

Если это так, то причина, по которой svcutil отказывается делать эти классы внутренними, связана с ограничением способа сериализации данных класса; XmlSerializer требует, чтобы классы были общедоступными.

Таким образом, единственное, что svcutil может сделать внутренним, - это интерфейсы служб и классы реализации служб.

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

0 голосов
/ 30 июля 2012

Это не ответ для решения вашей проблемы, однако он может объяснить, почему вы (и я) видите это в наших классах контрактов на данные:

MSDN - Устранение неполадок, связанных с сервисными ссылками

0 голосов
/ 19 января 2011

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

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