2009-09-30 5 views
6

웹 서비스의 wsdl/xsd에서 복합 객체 유형을 정의 할 때 xs : Sequence 대신에 WCF가 xs : All을 사용하도록 만들 수 있습니까?WCF가 xs : Sequence 대신에 xs : All을 사용하도록 강제 할 수 있으므로 SOAP 요소 순서가 적절하지 않습니까?

문제는 xs : Sequence는 호출 응용 프로그램이 생성 된 WCF xsd (기본적으로 알파벳순)에 지정된 순서대로 SOAP 메시지의 요소를 전달해야한다는 것입니다. xs : All (또는 그 문제에 대한 선택)은 순서를 신경 쓰지 않습니다.

이 동작은 구성 옵션을 통해 간단히 변경할 수 있습니까?

+0

정말로 원하는 경우 WSDL을 만들기 위해 자신 만의 확장 기능을 작성할 수 있습니다. 완전히 사소한 것은 아니지만 수행 할 수 있습니다. 웹에서 "WCF WSDL extension"을 검색하십시오. 거기에 꽤 많은 샘플이 있어야합니다. –

답변

3

내 머리 위로부터 나는 할 수 없다고 생각합니다. 대신 WSDL 파일을 직접 작성한 다음 svcutil.exe를 사용하여 코드를 생성하십시오.

알파벳순으로 다른 순서로 요소를 정렬하려는 경우 [DataMember] 특성에서 Order (배열과 유사하지 않은 1에서 시작) 매개 변수를 사용하여 DataContract의 요소를 정렬 할 수 있습니다 [DataMember (Order = 1)], [DataMember (Order = 2)] 등).

+1

+1 머리에 못을 박았습니다. WCF가 xs : all 대신 xs : all을 사용하도록 지시 할 방법이 없습니다. –

+0

한번은 WCF 질문에 더 빨리 대답 할 시간이 있습니다. :) – Philippe

+0

고마워, 나는 그럴 수도 있다고 생각했다. –

0

강제로 WCF를 실행할 수있는 경우에도 디시리얼라이저는 입력을 지원하기 위해 올바르게 작동하지 않습니다. 아래의 예와 설명.

입력 1 (좋은) : 2 (나쁜)

<MyOperation> 
    <AField>value A</AField> 
    <BField>value B</BField> 
</MyOperation> 

입력 : 입력 1이 제대로 역 직렬화하는 경우

<MyOperation> 
    <BField>value B</BField> 
    <AField>value A</AField> 
</MyOperation> 

그래서, 다음 입력 2는 않을 것 - BField에 값이 것이라고 설정되었지만 AField 속성은 null이됩니다.

WCF가이 순서가 잘못된 입력을 처리 할 수 ​​없다면 예외를 throw해야한다고 생각하지만 테스트 (.NET의 IIS 3.5)를 기반으로하지는 않습니다. 따라서 일부 요소 값은 건너 뜁니다. .

또한 WCF는 찾고있는 유효한 요소 값에 영향을주지 않는 한 완전히 가짜 입력을 무시합니다. 그래서이 입력

<MyOperation> 
    <bogusField>with or without data</bogusField> 
    <AField>value A</AField> 
    <bogusField2 /> 
    <BField>value B</BField> 
    <bogusField3></bogusField3> 
</MyOperation> 

는 오류가 발생하지 않을, 실제로 멀리하고 BField의 값을 역 직렬화 것이다.

관련 문제