2012-07-02 1 views
9

내 계약 보이는 경우 : 당신이 웹 서비스 참조를 가져올 때WCF 웹 서비스에서 반환 매개 변수가 끝나는 매개 변수를 방지하려면 어떻게해야합니까? 다음과 같이

string DoSomething(int id); 

:

[OperationContract] 
void DoSomething(int id, out string moreInfo); 

이처럼 보이는 끝납니다. 매개 변수 순서의 자동 변환에 영향을 미칠 수 있습니까? 함수 시그니처 시작 부분에 모든 out 매개 변수를 찾는 것은 이미 놀라운 일 이었지만 여전히 유효하지만 void 메소드가 계속 void 메소드가 되길 바란다. 아니면 SOAP의 제한 사항입니까?

WSDL 제한에 기초한 것으로 보인다
+1

이 경우 단일 'out'매개 변수가있는 void 메서드는 사실 올바른 반환 값을 가진 비 void 메서드입니다. 'out' 매개 변수를 정의하면 non-out 버전이 아닌 것을 알 수 있습니까? –

+0

@Adam 웹 서비스 설계시 직각 성이 있어야합니다. 우리는 원래 가치를 반환하는 서비스와 그렇지 않은 서비스를 가지고있었습니다. 그러나 각 서비스는 상태를 반환하도록 리팩토링되었습니다. 추가 매개 변수를 강요하면 빌드가 자동으로 실패하고 어디에서 문제를 해결할 것인지 알 수 있습니다. 또한 나머지 매개 변수와 상관없이 첫 번째 매개 변수가 상태를 포함하는 out-param이라는 사실을 항상 알고 있으면 편리합니다. – Abel

+3

저는 WCF가 그 작업을위한 프록시를 생성 할 수 있다는 사실에 실제로 놀랐습니다. 처음에'out' 매개 변수를 사용하는 이유는 무엇입니까? – MattDavey

답변

4

: http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/48b5992f-f7bd-4b67-8299-514d1780fa9a

WSDL 원래 메소드 서명을 표시하지 않는다; 대신, 입력 매개 변수를 그룹으로 표시하고 출력 매개 변수를 또 다른 그룹으로 표시합니다.

출력 매개 변수에서 리턴 값을 분리 할 수 ​​없다는 한계는 WSDL에 있습니다. 하지만 그건 void 메소드의 한계가 svcutil.exe의 일부라고 생각합니다. 첫 번째 출력을 반환 값으로 옮기지 않기 위해 svcutil에서 스위치를 사용할 수없는 이유는 없지만 ms 연결의 기능에 대한 요청 일 수밖에 없습니다.

void가 아니라 문제가 일관성이있는 경우 int 또는 bool이라는 간단한 상태를 반환 할 수 있지만 이미 수십 가지 방법이있는 경우 완벽하지는 않습니다.

+1

몇 분 전에 같은 링크에서 일어났습니다. 실제로 그것은 기본 WSDL의 한계입니다. 래퍼는 물론 모든 주문을 사용할 수 있지만 강제로 사용 사례가 표시되지 않습니다. 이러한 한계를 극복하기 위해 노력할 것입니다. 최소한 VoidResponse 유형을 사용하여 당분간 리팩터링을보다 쉽게 ​​만들 수 있습니다. – Abel

+0

VoidResponse 유형에 대한 좋은 아이디어. –