WCF动态添加ServiceKnownType
WCF中传输自定义类型时,必须在服务接口类(服务协定)上加上ServiceKnownType(typeof(yourClass)),
在实际应用中比较麻烦,可以用动态的办法来实现动态添加。
服务接口类,加上一行 [ServiceKnownType("GetKnownTypes", typeof(KnownHelper))]
再实现定义类KnownHelper及方法GetKnownTypes
[ServiceContract] [ServiceKnownType("GetKnownTypes", typeof(KnownHelper))] public interface IService { [OperationContract] DataSet GetData(Hashtable hash); }
static class KnownHelper
{
public static IEnumerable<Type> GetKnownTypes(ICustomAttributeProvider provider)
{
List<Type> knownTypes = new List<System.Type>();
string[] types = null;
if (System.Configuration.ConfigurationManager.AppSettings["KnownTypes"]!=null)
{
types = System.Configuration.ConfigurationManager.AppSettings["KnownTypes"].ToString().Split('|');
foreach (string type in types)
{
knownTypes.Add(Type.GetType(type));
}
}
return knownTypes;
}
}
这内我用的办法把需添加ServiceKnownType的类型名称写到配置文件的AppSettings内,当然也可以用其他办法,比如文件。