Silverlight 中 调用WCF数据契约中要传一个object 类型的属性.为什么用不了这个ServiceKnownType/KnownType,该如何处理
Silverlight 中 调用WCF数据契约中要传一个object 类型的属性.为什么用不了这个ServiceKnownType/KnownType
Silverlight 中 调用WCF数据契约中要传一个object 类型的属性.为什么用不了这个ServiceKnownType/KnownType
调用方法(GetMsg/SendMsg)时报错:
System.MethodAccessException: 方法“System.ServiceModel.Description.TypeLoader.GetKnownTypes(System.Object[], System.Reflection.ICustomAttributeProvider)”访问方法“WCFSLClient.ServiceReference1.Helper.GetKnownTypes(System.Reflection.ICustomAttributeProvider)”的尝试失败。
Silverlight的WCF代理是手写代码不是自动生成的. 在相关服务契约上加了ServiceKnownType特性
------解决方案--------------------
找到原因了,你的Helper声明没加public关键字,不加关键字默认是internal,只能同一个程序集访问,而它是在程序集System.ServiceModel.Description中反射你的这个类,所以看不到,调用失败,只要添加public关键字就正常了。
Silverlight 中 调用WCF数据契约中要传一个object 类型的属性.为什么用不了这个ServiceKnownType/KnownType
- C# code
[ServiceContract] [ServiceKnownType("GetKnownTypes", typeof(Helper))] public interface IMsgService { [OperationContract] void SendMsg(Message message); [OperationContract] Message GetMsg(); }
- C# code
[DataContract] //[KnownType("GetKnownTypes")] public class Message { [DataMember] public string Content { get; set; } [DataMember] public object obj { get; set; } //static Type[] GetKnownTypes() //{ // return new[] { typeof(string) }; //} }
- C# code
static class Helper { public static IEnumerable<Type> GetKnownTypes(ICustomAttributeProvider provider) { return new[] { typeof(string),..等(这里用时会动态取出要用的类型) }; } }
调用方法(GetMsg/SendMsg)时报错:
System.MethodAccessException: 方法“System.ServiceModel.Description.TypeLoader.GetKnownTypes(System.Object[], System.Reflection.ICustomAttributeProvider)”访问方法“WCFSLClient.ServiceReference1.Helper.GetKnownTypes(System.Reflection.ICustomAttributeProvider)”的尝试失败。
Silverlight的WCF代理是手写代码不是自动生成的. 在相关服务契约上加了ServiceKnownType特性
------解决方案--------------------
找到原因了,你的Helper声明没加public关键字,不加关键字默认是internal,只能同一个程序集访问,而它是在程序集System.ServiceModel.Description中反射你的这个类,所以看不到,调用失败,只要添加public关键字就正常了。