Если вы действительно не можете изменить библиотеку, то я считаю, что единственный способ представить классы через WCF - создать объекты-оболочки для каждого метода.Я бы посмотрел на написание генератора кода для этой задачи.
Вы можете поразмышлять над набором типов в сборке, которую вы хотите предоставить, чтобы получить необходимую информацию метаданных типа.
Вы можете использовать что-то вроде шаблонов t4 (часть VS 2008 и выше) и T4 Toolbox , чтобы создать генератор кода для написания кода для вас.Как только генератор будет готов, вам будет легко перезапустить снова, если ваша библиотека когда-либо изменится.Также легко исправлять ошибки, обновляя генератор кода и перезапуская его.
Другой вариант, который я упоминаю только для полноты, но у которого есть некоторые острые проблемы, - это дизассемблирование и исправление кода, о котором идет речь.Вы можете использовать что-то вроде ildasm, чтобы выгрузить файл сборки, добавить необходимую атрибуцию WCF и затем собрать ее с помощью ilasm.Однако этот процесс может быть подвержен ошибкам, и каждый раз, когда в сборку вносятся изменения, вам придется повторить процесс, могут возникнуть юридические проблемы в зависимости от того, кому принадлежит IP-адрес сборки, и вам придется переподписывать сборку,потенциально с другим криптографическим сертификатом, если он должен быть сборкой со строгим именем.
* Редактировать *
Запрошенный пример кода оболочки:
public class ToWrap {
public String Name { get; set; }
public String Address { get; set; }
}
[DataContract]
public class Wrapper {
private ToWrap _wrapped;
// constructor for WCF marshalling
public Wrapper() {
_wrapped = new ToWrap();
}
public Wrapper(ToWrap wrapped) {
_wrapped = wrapped;
}
[DataMember]
public String Name {
get { return _wrapped.Name; }
set { _wrapped.Name = value; }
}
[DataMember]
public String Address {
get { return _wrapped.Address; }
set { _wrapped.Address = value; }
}
}