I've got a working WCF interface using more than 100 ServiceKnownType in the contract like this:
[ServiceKnownType(typeof(RowUser))]
[ServiceKnownType(typeof(RowRegion))]
[ServiceKnownType(typeof(RowDocument))]
[... loads more ...]
[ServiceContract(SessionMode = SessionMode.Required)]
public interface IServiceBrowse : IDisposable
{
[OperationContract]
void Insert(Row satz);
}
Is there any way to provide these ServiceKnownTypes during runtime?
It is not only error-prone and tedious to add all these ServiceKnownTypes in the source, it keeps my assemblies tied together in a way I don't like (I'd like to be able to extract these types into subassemblies to decouple them, but can't since the Service needs to list all the known types).
Yes there is.
ServiceKnownTypeAttribute lets you specify a method name as the first parameter, followed by a parameter containing the System.Type implementing that method.
The specified method must be both static and public, and have a return type of IEnumerable.
[ServiceKnownType("RegisterKnownTypes", typeof(Services))]
public class Services : IServices
{
static public IEnumerable<Type> RegisterKnownTypes(ICustomAttributeProvider provider)
{
}
}
see also http://msdn.microsoft.com/en-us/library/system.servicemodel.serviceknowntypeattribute.aspx
来源:https://stackoverflow.com/questions/3044078/provide-serviceknowntype-during-runtime