Предоставить ServiceKnownType во время выполнения? - PullRequest
3 голосов
/ 15 июня 2010

У меня есть рабочий интерфейс WCF, использующий в контракте более 100 ServiceKnownType, например:

[ServiceKnownType(typeof(RowUser))]
[ServiceKnownType(typeof(RowRegion))]
[ServiceKnownType(typeof(RowDocument))]
[... loads more ...]
[ServiceContract(SessionMode = SessionMode.Required)]
public interface IServiceBrowse : IDisposable
{
  [OperationContract]
  void Insert(Row satz);
}

Есть ли способ предоставить эти ServiceKnownTypes во время выполнения?
Добавление всех этих ServiceKnownTypes в исходный код не только подвержено ошибкам и утомительно, но и связывает мои сборки так, как мне не нравится (я хотел бы иметь возможность извлекать эти типы в подсборки для их разделения, но не может, так как Служба должна перечислить все известные типы).

1 Ответ

11 голосов
/ 15 июня 2010

Да, есть.

ServiceKnownTypeAttribute позволяет указать имя метода в качестве первого параметра, за которым следует параметр, содержащий System.Type, реализующий этот метод.

Указанный метод должен быть как статическим, так и общедоступным, и иметь возвращаемый тип IEnumerable.

[ServiceKnownType("RegisterKnownTypes", typeof(Services))]
public class Services : IServices
{
    static public IEnumerable<Type> RegisterKnownTypes(ICustomAttributeProvider provider)
    {
    }
}

см. Также http://msdn.microsoft.com/en-us/library/system.servicemodel.serviceknowntypeattribute.aspx

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