Я пытаюсь добавить документацию, совместимую с IntelliSense и SandCastle, в мои прокси-классы WCF, созданные с помощью svcutil. Есть ли способ сделать это без прямого редактирования сгенерированного кода (поскольку он будет потерян, если он когда-либо будет перегенерирован)?
Как создать документацию, совместимую с IntelliSense, для сгенерированных прокси-классов WCF?
Ответы (5)
В проекте WCFExtras вы можете найти нужную вам функциональность; средство экспорта и импорта WSDL, которое берет документацию по коду XML и встраивает ее в WSDL + извлекает ее и снова добавляет в качестве документа XML на сгенерированном прокси-сервере на стороне клиента.
WCFExtras можно найти здесь: http://wcfextras.codeplex.com/ (или в виде пакета Nuget).
--larsw
Ограниченным решением может быть создание документации только частичных классов для отражения классов, созданных SvcUtil. Поскольку классы SvcUtil создаются как частичные классы, вы можете воспользоваться этим для документирования класса, но, вероятно, это не сработает для методов или свойств. IntelliSense отобразит комментарии. Я считаю, что SandCastle также объединит комментарии, но не пробовал. Синхронизация этих классов с изменениями службы может быть сложной задачей, если вы хотите пойти по этому пути.
Вот как будет выглядеть класс документации:
/// <summary>
/// This is a comment
/// </summary>
public partial class YourSvcUtilGenerateClientClass { }
Я думаю, вы можете переопределить способ создания этих классов с помощью шаблона. Вот ссылка на статью, говорящую. Они сосредоточены на Silverlight, но я думаю, что контекст кода все еще применим.
Лично я никогда не использую сгенерированные прокси-классы WCF. Слишком просто создать собственный прокси-класс. Это все, что нужно (методы могут быть добавлены для вас Visual Studio, когда вы добавляете свой интерфейс ServiceContract в свой прокси-класс):
using System.ServiceModel;
namespace My.Namespace
{
public class MyServiceContractProxy : ClientBase<IMyServiceContract>, IMyServiceContract
{
public MyServiceContractProxy() { }
public MyServiceContractProxy(string endpointName) : base(endpointName) { }
#region IMyServiceContract Members
public int AddValues(int val1, int val2)
{
return Channel.AddValues(val1, val2);
}
#endregion
}
}
Если ваш ServiceContract изменится, он выдаст ошибку компиляции, потому что ваш прокси-сервер больше не будет соответствовать интерфейсу, но обычно это не более 10-секундного редактирования вашего прокси-класса.
Поскольку маршрут комментариев XML не соответствует вашим потребностям, Document! Продукт X 2011 можно было бы выбрать. Это не бесплатно, но это будет делать то, что вам нужно.