2012-01-04 2 views
0

내 프로젝트에서 wcf에 의해 노출 된 뷰 모델 도시가 있습니다.
속성 중 하나의 이름이 다르게 지정되면 이미 노출 된 계약이 지정됩니다.
그러므로 나는 DataMember를 속성을 추가하고 같은 이름의 값을 설정 :데이터 멤버 이름 속성이 웹 서비스에서 무시됩니다.

<DataContract(Namespace:=ServiceNamespace)> _ 
Public Class City 
    private mySelectedTranslation as String 
    <DataMember(Name:="CityName")> _ 
    Public Property SelectedTranslation() As String 
      Get 
       Return mySelectedTranslation 
      End Get 
      Set (ByVal value As String) 
       mySelectedTranslation = value 
      End Set 
     End Property 
End Class 

을 내 소비 테스트 프로젝트에서 서비스 참조는 그러나 DataMember를에 속성 데리러하지 않는 것 대신의 SelectedTranslation 속성을 수신 CityName 속성

무엇이 누락 되었습니까?

UPDATE 나는 내가하는 ServiceContract의 XmlSerializerFormat(Style:=OperationFormatStyle.Rpc) 설정을 제거 할 때 DataMember를 속성이 올바르게 사용되는 것을 발견
. 나는 RPC XmlSerializer가 도청 당할 수도 있다고 생각하고 있나?

답변

1

WCF의 XML에 대한 기본 serializer는 DataContractSerializer (DCS)과 XmlSerializer입니다. 전자는 <DataContract><DataMember>과 같은 특성을 이해합니다 (System.Runtime.Serialization 네임 스페이스에서 가져옴). 후자는 <XmlElement>, <XmlAttribute> 등과 같이 System.Xml.Serialization 네임 스페이스의 특성을 이해합니다. 계약을 <XmlSerializerFormat>으로 꾸밀 경우 WCF에 XmlSerializer을 사용한다고 말하면 DCS 관련 특성을 무시합니다 (DCS가 기본값 임).

<XmlType(Namespace:=ServiceNamespace)> _ 
Public Class City 
    private mySelectedTranslation as String 
    <XmlElement(ElementName:="CityName")> _ 
    Public Property SelectedTranslation() As String 
      Get 
       Return mySelectedTranslation 
      End Get 
      Set (ByVal value As String) 
       mySelectedTranslation = value 
      End Set 
     End Property 
End Class 
: 당신이 XmlSerializer을 사용하는 동안 요소 이름을 변경하려면

, 당신은 <XmlElement> 속성을 사용할 수 있습니다

관련 문제