2012-08-16 6 views
1

XSD 정의로 데이터 형식을 만듭니다. 그런 다음이 xsd 파일을 WebSphere Application Server로 가져옵니다.WCF xsd 데이터 형식을 기반으로하는 계약

WebSphere Application Server가 이러한 데이터 유형을 사용하여 WCF 웹 서비스를 호출 할 수있게하려고합니다. xsd.exe를 통해이를 실행

<xs:simpleType name="Stillingsprosent"> 
     <xs:restriction base="xs:double"/> 
    </xs:simpleType> 

    <xs:element name="gjennomsnittStillingsprosent" type="Stillingsprosent" minOccurs="0" maxOccurs="1"/> 

다음 C# 코드를 생성합니다 다음과 같이

원래 XSD이었다

public partial class GjennomsnittStillingsprosent { 

private double gjennomsnittField; 

private bool gjennomsnittFieldSpecified; 

/// <remarks/> 
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] 
public double gjennomsnitt { 
    get { 
     return this.gjennomsnittField; 
    } 
    set { 
     this.gjennomsnittField = value; 
    } 
} 

/// <remarks/> 
[System.Xml.Serialization.XmlIgnoreAttribute()] 
public bool gjennomsnittSpecified { 
    get { 
     return this.gjennomsnittFieldSpecified; 
    } 
    set { 
     this.gjennomsnittFieldSpecified = value; 
    } 
} 
} 

우리가 다음이 데이터 타입 IA를 사용하는 경우 WCF는 다음을 생산 계약 XSD :

<xs:complexType name="GjennomsnittStillingsprosent"> 
<xs:sequence> 
    <xs:element name="gjennomsnittField" type="xs:double"/> 
    <xs:element name="gjennomsnittFieldSpecified" type="xs:boolean"/> 
</xs:sequence> 
</xs:complexType> 
<xs:element name="GjennomsnittStillingsprosent" nillable="true" type="tns:GjennomsnittStillingsprosent"/> 
  • 데이터 계약이 원본 xsd와 같아야합니다.
  • 생성 후 파일을 편집하지 않아도됩니다. (데이터 모델이 큼)

문제는 minoccurs = 0 인 선택적 필드와 관련이 있으며, 실제로는 null입니다. xsd.exe는 .net에 null 가능 유형이 있기 전에 만들어졌습니다.

WCF 계약에 사용 된 데이터 유형이 XSD에 지정된 데이터 유형과 정확히 일치하도록하려면 어떻게해야합니까?

답변

0

것은 이런 식으로 뭔가를 선언 : 다음

[DataContract] 
public class Stillingsprosent{ 
[DataMember] 
public double stillingsprosent; 
} 

어딘가에 그것을 사용하기 :

[DataMember(EmitDefault=false)] 
public Stillingsprosent? gjennomsnittStillingsprosent; 

EmitDefault = 거짓이이 방출되지 않음을 의미 할 때의 기본 (여기 즉, 널 (null))

+0

대답에 대한 답변, 불행히도 문제가 해결되지 않으면 클라이언트와 서버의 계약서에있는 이름이 일치하지 않습니다. –

+0

죄송합니다. 질문의 두 번째 부분 (null 가능)에 응답하고 첫 번째 부분을 찾지 못했습니다 - 지금 답변을 수정하겠습니다 :) – Chris