WCF가 필요한 메소드 매개 변수 (Minoccurs =“1”)를 사용하여 WSDL을 자극하는 방법을 어떻게 강제 할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/1438623

  •  08-07-2019
  •  | 
  •  

문제

WCF 및 OperationContracts를 사용하는 동안 다음 방법이 정의되어 있습니다.

    [OperationContract]
    [FaultContract(typeof(ValidationFault))]
    [FaultContract(typeof(FaultException<ExceptionDetail>))]
    int DoSomething(int someId, MyComplexType messageData);

WCF 런타임에 의해 이것이 WSDL로 변환되면, 매개 변수에 대해 나열된 minoccurs = "0"으로 끝납니다.

soapui를 사용하여 프록시를 생성하면 다음과 같은 것처럼 보입니다.

  <com:DoSomething>
     <!--Optional-->
     <com:EventId>1</com:EventId>
     <!--Optional-->
     <com:myComplexType >
        <com:id>1</com:id>
     </com:myComplexType >
  </com:DoSomething>

MyComplexType의 ID 필드에는 isrequired = "true"를 사용하여 Datamemeber 속성이 표시되어 필수로 노출됩니다.

WSDL이 매개 변수가 그렇지 않은 경우 선택 사항임을 지정하는 것은 분명히 오해의 소지가 있지만, OperationContract를 마크 업하여 WCF가 필요에 따라 이러한 매개 변수를 인식하고 노출시킬 수있는 명백한 방법을 볼 수는 없습니다.

나는 이것을 할 수있는 명백한 방법이없는 것처럼 보이지 않았다 (IntelliSense / MSDN / Google을 읽는 것). 아니면 나는 눈이 멀고 분명한 것을 간과하고 있습니다.

단서가 있습니까?

도움이 되었습니까?

해결책

방금 썼습니다 블로그 게시물 이 주제에 대해, 지난주에 문제를 해결하면서. WCF가 런타임에 생성하는 메타 데이터를 수정하는 방법을 설명합니다.

소스 파일을 다운로드하는 것 외에도 계약 정의에 속성 만 추가하면됩니다. 그렇게 :

[ServiceContract]
[RequiredParametersBehavior]
public interface ICalculatorService
{
    [OperationContract]
    int Add(int firstValue, int secondValue);
}

다음은 더 자세히 설명하는 블로그 게시물입니다. WCF를 사용하여 WSDL Minoccurs 제어

다른 팁

MyComplexType에 [DataContract] 속성이 표시되어 있는지 확인하십시오.

내 자신의 WCF 계약의 경우, 계약에 연루된 전체 체인의 체인이 그대로 표시 될 때까지 Minoccurs = 1이 생성 된 WSDL에서 isrequired = true에 표시되지 않는다는 것을 발견했습니다.

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