none
Wcf server 端的 DataContract 对象(类)不能下载到客户端。。。。 RRS feed

  • 问题

  • 一个 Service 接口类文件里写了 N个 DataContract ,我是在客户端程序通过添加服务引用方式生成代理的。

    可为什么老是丢失一些 server 端的 Data 类型

    2011年10月19日 2:44

答案

  • Hi,


    打开‘+ <wsdl:types>’节点,在<xsd:import>你会看到schemaLocation属性,把它的值(e.g: http://localhost:1082/ConsumerService.svc?xsd=xsd2)输入到IE浏览器的地址栏中,这时你会看到<xs:complexType>结点对应DataContract类中的属性。

    例如:

        [DataContract]
        public class Consumer
        {
           // [DataMember(IsRequired = true, Order = 1)]
            [XmlElement(IsNullable = true)]
            public string FirstName { get; set; }
    
            [DataMember(IsRequired = true, Order = 2)]
            public string LastName { get; set; }
    
            [DataMember(IsRequired = true, Order = 3)]
            public char Gender { get; set; }
    
            [DataMember(IsRequired = true, Order = 4)]
            public DateTime DOB { get; set; }
    
            [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 5)]
            public int Weight { get; set; }
    
            [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 6)]
            public int Height { get; set; } 
        }
        public class ConsumerService : IConsumerService
        {
            public Consumer DoWork(int consumerID)
            {
                return new Consumer();
            }
        }
    - <wsdl:types>
    - <xsd:schema targetNamespace="http://tempuri.org/Imports">
      <xsd:import schemaLocation="http://localhost:1082/ConsumerService.svc?xsd=xsd0" namespace="http://tempuri.org/" /> 
      <xsd:import schemaLocation="http://localhost:1082/ConsumerService.svc?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/" /> 
      <xsd:import schemaLocation="http://localhost:1082/ConsumerService.svc?xsd=xsd2" namespace="http://schemas.datacontract.org/2004/07/WcfService1" /> 
      </xsd:schema>
      </wsdl:types>
      <?xml version="1.0" encoding="utf-8" ?> 
    - <xs:schema elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/WcfService1" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:tns="http://schemas.datacontract.org/2004/07/WcfService1">
      <xs:import schemaLocation="http://localhost:1082/ConsumerService.svc?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/" /> 
    - <xs:complexType name="Consumer">
    - <xs:sequence>
      <xs:element name="LastName" nillable="true" type="xs:string" /> 
      <xs:element name="Gender" type="ser:char" /> 
      <xs:element name="DOB" type="xs:dateTime" /> 
    - <xs:element minOccurs="0" name="Weight" type="xs:int">
    - <xs:annotation>
    - <xs:appinfo>
      <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" /> 
      </xs:appinfo>
      </xs:annotation>
      </xs:element>
    - <xs:element minOccurs="0" name="Height" type="xs:int">
    - <xs:annotation>
    - <xs:appinfo>
      <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" /> 
      </xs:appinfo>
      </xs:annotation>
      </xs:element>
      </xs:sequence>
      </xs:complexType>
      <xs:element name="Consumer" nillable="true" type="tns:Consumer" /> 
      </xs:schema>

    The WS-Policy specification provides a general framework for applying policies that modify the semantics of connections and communications at runtime in a Web services application. we can use it to configure message protection and authentication requirements. Please refer to the following article to get more inoformation.

    http://www.w3.org/TR/ws-policy/#tocRange

     

     


    Please mark the replies as answers if they help or unmark if not. If you have any feedback about my replies, please contact msdnmg@microsoft.com Microsoft One Code Framework
    2011年10月25日 6:08
    版主

全部回复

  • 服务端的DataContract 类,只有在服务操作里使用到了(参数类型、返回值类型),才会暴露到WSDL里,才能被客户端通过引用生成,
    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    2011年10月19日 5:56
    版主
  • 我在服务端的DataContract类,我在服务端的操作使用到了(参数类型,返回值类型),我可是在WSDL还是找不到怎么描述的,能发张截图介绍下WCF中WSDL是怎么描述DataContract的么?还有关于WSDL对于在ServiceContract中的方法和参数类型是怎么描述的?麻烦你了版主。

    2011年10月21日 8:22
  • 我在服务端的DataContract类,我在服务端的操作使用到了(参数类型,返回值类型),我可是在WSDL还是找不到怎么描述的,能发张截图介绍下WCF中WSDL是怎么描述DataContract的么?还有关于WSDL对于在ServiceContract中的方法和参数类型是怎么描述的?麻烦你了版主。


    你可以在本地建一个WCF服务程序,就是默认的WCF服务项目就可以了,然后在浏览器里查看svc文件,有个WSDL,你点击进去就可以看到,这个测试项目可以很好地帮助你理解WSDL和数据契约的关系~
    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    2011年10月21日 10:18
    版主
  • 我在服务端的DataContract类,我在服务端的操作使用到了(参数类型,返回值类型),我可是在WSDL还是找不到怎么描述的,能发张截图介绍下WCF中WSDL是怎么描述DataContract的么?还有关于WSDL对于在ServiceContract中的方法和参数类型是怎么描述的?麻烦你了版主。


    你可以在本地建一个WCF服务程序,就是默认的WCF服务项目就可以了,然后在浏览器里查看svc文件,有个WSDL,你点击进去就可以看到,这个测试项目可以很好地帮助你理解WSDL和数据契约的关系~
    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛
    Windows Azure中文技术论坛


    这是我按照你说的做的,这是生成的WSDL的截图:但是这里面先是WS—Policy,策略说明,接下来的是WSDL的元素,但是我只找到对服务契约的说明,并没有找到对于数据契约CompositeType类的说明呀。还望详细指出在哪地方?还有关于策略在这的作用,一直不太清楚。麻烦了
    2011年10月21日 11:14
  • Hi,


    打开‘+ <wsdl:types>’节点,在<xsd:import>你会看到schemaLocation属性,把它的值(e.g: http://localhost:1082/ConsumerService.svc?xsd=xsd2)输入到IE浏览器的地址栏中,这时你会看到<xs:complexType>结点对应DataContract类中的属性。

    例如:

        [DataContract]
        public class Consumer
        {
           // [DataMember(IsRequired = true, Order = 1)]
            [XmlElement(IsNullable = true)]
            public string FirstName { get; set; }
    
            [DataMember(IsRequired = true, Order = 2)]
            public string LastName { get; set; }
    
            [DataMember(IsRequired = true, Order = 3)]
            public char Gender { get; set; }
    
            [DataMember(IsRequired = true, Order = 4)]
            public DateTime DOB { get; set; }
    
            [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 5)]
            public int Weight { get; set; }
    
            [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 6)]
            public int Height { get; set; } 
        }
        public class ConsumerService : IConsumerService
        {
            public Consumer DoWork(int consumerID)
            {
                return new Consumer();
            }
        }
    - <wsdl:types>
    - <xsd:schema targetNamespace="http://tempuri.org/Imports">
      <xsd:import schemaLocation="http://localhost:1082/ConsumerService.svc?xsd=xsd0" namespace="http://tempuri.org/" /> 
      <xsd:import schemaLocation="http://localhost:1082/ConsumerService.svc?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/" /> 
      <xsd:import schemaLocation="http://localhost:1082/ConsumerService.svc?xsd=xsd2" namespace="http://schemas.datacontract.org/2004/07/WcfService1" /> 
      </xsd:schema>
      </wsdl:types>
      <?xml version="1.0" encoding="utf-8" ?> 
    - <xs:schema elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/WcfService1" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:tns="http://schemas.datacontract.org/2004/07/WcfService1">
      <xs:import schemaLocation="http://localhost:1082/ConsumerService.svc?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/" /> 
    - <xs:complexType name="Consumer">
    - <xs:sequence>
      <xs:element name="LastName" nillable="true" type="xs:string" /> 
      <xs:element name="Gender" type="ser:char" /> 
      <xs:element name="DOB" type="xs:dateTime" /> 
    - <xs:element minOccurs="0" name="Weight" type="xs:int">
    - <xs:annotation>
    - <xs:appinfo>
      <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" /> 
      </xs:appinfo>
      </xs:annotation>
      </xs:element>
    - <xs:element minOccurs="0" name="Height" type="xs:int">
    - <xs:annotation>
    - <xs:appinfo>
      <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" /> 
      </xs:appinfo>
      </xs:annotation>
      </xs:element>
      </xs:sequence>
      </xs:complexType>
      <xs:element name="Consumer" nillable="true" type="tns:Consumer" /> 
      </xs:schema>

    The WS-Policy specification provides a general framework for applying policies that modify the semantics of connections and communications at runtime in a Web services application. we can use it to configure message protection and authentication requirements. Please refer to the following article to get more inoformation.

    http://www.w3.org/TR/ws-policy/#tocRange

     

     


    Please mark the replies as answers if they help or unmark if not. If you have any feedback about my replies, please contact msdnmg@microsoft.com Microsoft One Code Framework
    2011年10月25日 6:08
    版主