none
Silverlight 中 调用WCF数据契约中要传一个object 类型的属性.为什么用不了这个ServiceKnownType/KnownType RRS feed

  • 问题

  • Silverlight 中 调用WCF数据契约中要传一个object 类型的属性.为什么用不了这个ServiceKnownType/KnownType

     [ServiceContract]
        [ServiceKnownType("GetKnownTypes", typeof(Helper))]
        public interface IMsgService
        {
            [OperationContract]
            void SendMsg(Message message);

            [OperationContract]
            Message GetMsg();
        }

     [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) };
           //}
        }

    Helper如下:   

    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特性






    2012年4月9日 6:29

答案

  • 找到原因了,Helper声明没加public关键字,只要添加public关键字就正常了。
     
    ..但不知为什么用WPF/.....其它的调用不用加...我加上private都没问题...SL还有些地方不太一样呀....

    C#.GDI+WPF.WCF.WF.Socket..........(C/S)

    2012年4月11日 1:58

全部回复