首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WSDL中没有显示WCF MessageContract属性。

WSDL中没有显示WCF MessageContract属性。
EN

Stack Overflow用户
提问于 2018-04-23 08:48:59
回答 2查看 463关注 0票数 0

我定义了一个MessageContract,以便通过WCF传输一个Stream和一些其他数据:

代码语言:javascript
复制
[MessageContract]
public class DTSetGeotagImageMessage
{
    [MessageHeader(MustUnderstand = true)]
    public DTGeotagImageFileInfo GeotagImageFileInfo;

    [MessageBodyMember(Order = 1)]
    public Stream FileData;
}

public class DTGeotagImageFileInfo
{ //All these properties are not showing up in the WSDL:
    public long? GeotagID { get; internal set; }
    public string GeotagGuid { get; internal set; }
    public string ImageGuid { get; internal set; }
    public long GeotagFieldId { get; internal set; }
    public double Lat { get; internal set; }
    public double Lon { get; internal set; }
}

WSDL:

代码语言:javascript
复制
<xs:complexType name="DTGeotagImageFileInfo">
 <xs:sequence/>
</xs:complexType>
<xs:element name="DTGeotagImageFileInfo" nillable="true" type="tns:DTGeotagImageFileInfo"/>

但是头数据类的属性并没有显示在WSDL文件中。我怎么才能让他们出现?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-24 09:12:52

DataContracts/DataMembers上的服务约定访问修饰符不起任何作用。.NET设置器和getter可见修饰符在处理WCF消息时与它们无关,只要您相应地标记它们:

代码语言:javascript
复制
//Tag DataContract and DataMember for serialization
[DataContract]
public class DTGeotagImageFileInfo
{ 
    [DataMember]
    public long? GeotagID { get; internal set; }
    [DataMember]
    public string GeotagGuid { get; internal set; }
    [DataMember]
    public string ImageGuid { get; internal set; }
    [DataMember]
    public long GeotagFieldId { get; internal set; }
    [DataMember]
    public double Lat { get; internal set; }
    [DataMember]
    public double Lon { get; internal set; }
}
票数 0
EN

Stack Overflow用户

发布于 2018-04-23 08:48:59

结果表明,MessageContract属性必须有一个public设置程序才能被生成代码的代码所看到:

代码语言:javascript
复制
public class DTGeotagImageFileInfo
{
    public long? GeotagID { get; set; }
    public string GeotagGuid { get; set; }
    public string ImageGuid { get; set; }
    public long GeotagFieldId { get; set; }
    public double Lat { get; set; }
    public double Lon { get; set; }
}

WSDL:

代码语言:javascript
复制
<xs:complexType name="DTGeotagImageFileInfo">
    <xs:sequence>
     <xs:element minOccurs="0" name="GeotagFieldId" type="xs:long"/>
     <xs:element minOccurs="0" name="GeotagGuid" nillable="true" type="xs:string"/>
     <xs:element minOccurs="0" name="GeotagID" nillable="true" type="xs:long"/>
     <xs:element minOccurs="0" name="ImageGuid" nillable="true" type="xs:string"/>
     <xs:element minOccurs="0" name="Lat" type="xs:double"/>
     <xs:element minOccurs="0" name="Lon" type="xs:double"/>
    </xs:sequence>
   </xs:complexType>
   <xs:element name="DTGeotagImageFileInfo" nillable="true"
       type="tns:DTGeotagImageFileInfo"/>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49976880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档