문제

저는 WCF를 사용하여 C#에서 wsdl 및 클라이언트 우선 개발을 수행하고 있습니다(wsdl 및 클라이언트는 이미 존재하며 서버 측을 구축 중입니다). 이상한 문제가 있습니다.wsdl.exe를 사용하여 .wsdl에서 계약을 생성했으며 이를 빌드하고 WCF 서비스를 Windows 서비스로 호스팅할 수 있습니다.

그러나 내가 얻는 wsdl은 http://localhost/Service?wsdl 공개 속성 대신 비공개 필드를 노출합니다(예:대신에 OsType 나는 얻다 m_OsTypeField, 이는 공개 변수와 연관된 개인 변수입니다. OsType 재산.)

이 문제가 있는 클래스 중 하나의 속성은 다음과 같습니다.[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://xxxxxxx.com/")]

.NET XML 직렬 변환기는 모든 전용 멤버를 무시해야 하기 때문에 완전히 당황스럽습니다.왜 이런 일이 일어날 수 있는지에 대한 아이디어가 있습니까?

도움이 되었습니까?

해결책

WCF를 사용하는 경우에는 사용하면 안 됩니다. wsdl.exe 하지만 svcutil.exe 대신에.

또한 표준 WCF DataContract 직렬 변환기는 [DataMember] 특성으로 표시한 모든 항목을 직렬화합니다. .NET 가시성 설정은 실제로 데이터의 SOA 보기와 관련이 없습니다.

그러나 코드 샘플에서는 DataContractSerializer가 아닌 Xml Serializer를 사용하는 것처럼 나타납니다. 아마도 svcutil.exe 대신 wsdl.exe를 사용했기 때문일 것입니다.

svcutil.exe를 사용하여 서버측 스텁을 생성해 볼 수 있습니까?아직도 같은 문제가 보이나요?

마크

다른 팁

DataContracts는 XMLSerializer 엔진을 사용하고 있지만 OperationContract는 DataContractSerializer를 사용하고 있습니다.

운영 계약에서 XmlSerializerformattribute를 적용하십시오

MSDN에서 http://msdn.microsoft.com/en-us/library/ms732038(v=vs.90).aspx

때때로 DatacontractSerializer는 유형을 직렬화하기에 적합하지 않습니다. WCF는 대체 직렬화 엔진 인 XMLSerializer를 지원하며 매개 변수를 직렬화하는 데 사용할 수 있습니다. XmlSerializer를 사용하면 XMLATTRIBITEATTRIBET와 같은 속성을 사용하여 결과 XML을 더 많이 제어 할 수 있습니다. 특정 작업 또는 전체 서비스에 XMLSerializer를 사용하여 전환하려면 XMLSerializerformattribute 속성을 작업 또는 서비스에 적용하십시오. 예를 들어:

[ServiceContract] 
public interface IAirfareQuoteService
{
    [OperationContract]
    [XmlSerializerFormat]
    float GetAirfare(Itinerary itinerary, DateTime date);
}

자세한 내용은 XMLSerializer 클래스 사용을 참조하십시오. 여기에 표시된대로 XMLSerializer로 수동으로 전환하는 것은 해당 주제에 자세히 설명해야 할 특정 이유가 없다면 권장하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top