2012-06-14 4 views
1

DataContact/DataMember 특성을 사용하여 WCF 서비스를 노출하면이 서비스에 대한 다른 프로젝트에서 만든 각 서비스 참조는 DataContract/DataMember 특성 (IExtensibleDataObject 인터페이스 구현 등)이있는 클래스를 생성합니다.WCF 프록시 생성 클라이언트에서 사용 된 serializer는 무엇이 결정됩니까?

다른 프로젝트에서는 WSDL이 WCF에 의해 생성되지 않은 SOAP 서비스를 사용해야하지만 모르는 다른 도구에서 동작을 변경할 수 없습니다.

내 문제는 내는 svcutil 프록시에 의해 생성 된 코드는 조금 덜 유연하다는 것이다 :

  • 클래스 대신 DataContract의 직렬화 속성을 사용 (GeneratedCode 속성이 시스템 대신에서 System.Xml의 사용을 지정합니다 .Runtime.Serialization)
  • IExtensibleDataObject 직렬화가 초래되는
  • OptionalField 특성이 XMLELEMENT
  • 의 순서가 고정
  • 를 사용하지 않는 구현되지 않은 경우에는 새로운 XS를 실패 요소에 삽입 wsdl xs : sequence의 중간 ...

내가 사용하는 svcutil 도구/wsdl에서 이런 식으로 코드를 생성해야합니까?

답변

1

내가 사용하는 svcutil 도구/wsdl에서 어떤 일이 발생했는지, 코드를 이렇게 생성합니까?

Svcutil.exe 도구를 사용하여 WCF 및 ASMX 서비스 용 클라이언트 프록시를 만들 수 있습니다. Svcutil.exe를 사용하여 ASMX 서비스에서 프록시를 만들 때 코드에서 생성되는 데이터 형식은 일반적으로 XML serialization을 사용합니다.

http://msdn.microsoft.com/en-us/library/cc304837.aspx

UPDATE :

내 추측이는 WSDL에 지정된 스키마이다는하여 svcutil.exe에 의해 사용되어야하는 직렬화를 결정합니다.

데이터 계약 직렬화 스키마의 네임 스페이스는 http://schemas.microsoft.com/2003/10/Serialization이며 그 내용은 here에 대한 자세한 내용을 확인할 수 있습니다.

그래서 svcutil이 wsdl에 지정된이 스키마를 보면 xml serializer 인 data-contract serializer를 사용합니다.

또한 WCF 및 ASMX의 WSDL로 확인했습니다. WCF 서비스의 WSDL은 다음 XSD 섹션을 포함하며 ASMX 섹션에 없습니다.

<xsd:schema targetNamespace="http://tempuri.org/Imports"> 

    <xsd:import schemaLocation="http://localhost:53328/Service1.svc?xsd=xsd0" 
    namespace="http://tempuri.org/"/> 

    <xsd:import schemaLocation="http://localhost:53328/Service1.svc?xsd=xsd1" 
    namespace="http://schemas.microsoft.com/2003/10/Serialization/"/> 

    <xsd:import schemaLocation="http://localhost:53328/Service1.svc?xsd=xsd2" 
     namespace="http://schemas.datacontract.org/2004/07/WcfService1"/> 
</xsd:schema> 
+0

내 경우에는 WCF 또는 asmx 서비스를 사용하지 않습니다. svcutil.exe는 well-formed wsdl에 대한 클라이언트 프록시를 생성 할 수 있습니다 (사용 된 구문에 대한 일부 제한이 있지만 어쨌든). 그래서 wsdl에서 datacontract 또는 xml serialization을 사용할지 결정합니다. 이 문서에 대한 msdn 어딘가에 있나요? –

+1

답변을 업데이트했습니다. – VJAI

관련 문제