none
WCF新手问个问题 RRS feed

  • 问题

  • 1。我在WCF服务端定义一个普通类
    public student
    {
        public string Name
        {
           get;
           set;
         }
    }

    为什么在客户端new不出student呢??

    2。WCF服务类有一个方法和一个字段,为什么在客户端只能调用这个方法,而调用不了这个字段呢??
    2010年3月17日 16:15

答案

  • Hi,

    你的代码定义有问题。

     [DataContract]-----------------这个应该是服务契约,   [ServiceContract]应该放这里。
        public class Service1 : IService1
        {
            [DataMember]
            public string ServiceName
            {
                get;
                set;
            }

            public string DoWork(string msg)
            {
                return msg;
            }
        }

        [ServiceContract]-----------这个是数据契约,[DataContract]应该放这里。
        public class Student
        {
            [DataMember]
            public string Name
            {
                get;
                set;
            }

            [DataMember]
            public string ID
            {
                get;
                set;
            }
        }


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    • 已标记为答案 Mog Liang 2010年3月24日 4:19
    2010年3月19日 4:44
    版主

全部回复

  • Hi,

    1,你客户端NEw不出来,也久是不能实例化,因为这个类不是数据契约,客户端,就没有反序列化生成的本地代码类。所以不行。解决办法久是生命为数据契约。
    2.服务类实现的是数据契约的信息,WSDL里提供了是对于服务操作,参数,返回值等的描述信息,如果WSDL里没有提供这些信息,客户端反序列化服务类代理的依据就是WSDL。所以不行。你可以定义一个操作契约。

    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2010年3月18日 1:01
    版主
  •     [ServiceContract]   
        public interface IService1
        {

            [OperationContract]
            string DoWork(string msg);
        }

        [DataContract]
        public class Service1 : IService1
        {
            [DataMember]
            public string ServiceName
            {
                get;
                set;
            }

            public string DoWork(string msg)
            {
                return msg;
            }
        }

        [ServiceContract]
        public class Student
        {
            [DataMember]
            public string Name
            {
                get;
                set;
            }

            [DataMember]
            public string ID
            {
                get;
                set;
            }
        }

    以上代码是在服务器那里写的..
    可不可以帮我看下代码哪里有问题呢...

    客户端访问不了Service1的ServiceName属性,但可以访问DoWork方法
    客户端也new不出Student这个对像
    2010年3月18日 2:55
  • 把Student作为一个参数类型,或者一个服务方法的返回类型。
    这样WCF才会把Student放进WSDL里。

    你这里因为没有使用,所以不会包涵进取。


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2010年3月18日 11:14
    版主
  • 谢谢Frank Xu Lei 版主..

    studnet 对象已经可以new出来了.但Service1这个类的 ServiceName属性在客户端还是无法访问,请问怎么回事呢...

    2010年3月19日 4:30
  • Hi,

    你的代码定义有问题。

     [DataContract]-----------------这个应该是服务契约,   [ServiceContract]应该放这里。
        public class Service1 : IService1
        {
            [DataMember]
            public string ServiceName
            {
                get;
                set;
            }

            public string DoWork(string msg)
            {
                return msg;
            }
        }

        [ServiceContract]-----------这个是数据契约,[DataContract]应该放这里。
        public class Student
        {
            [DataMember]
            public string Name
            {
                get;
                set;
            }

            [DataMember]
            public string ID
            {
                get;
                set;
            }
        }


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    • 已标记为答案 Mog Liang 2010年3月24日 4:19
    2010年3月19日 4:44
    版主
  • 版主,你好..

    我按照你的方法去改,还是访问不了ServiceName属性哦...

    2010年3月19日 6:49
  •         [DataMember]
            public string ServiceName
            {
                get;
                set;
            }定义放到数据契约里
    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2010年3月19日 7:38
    版主