2009-08-10 1 views
3

둘 다 .Net Framework 3.5를 사용하는 두 개의 웹 사이트가 있습니다. 하나의 웹 사이트는 비누 웹 서비스를 호스팅하고 다른 하나는이 서비스를 참조합니다. 웹 메서드 서명에 예기치 않은 사건이 발생했습니다. 나는 서명과 같은 내 웹 서비스의 간단한 방법이 있습니다데이터 형식 문자열 []에 대한 요청/응답 개체로 웹 서비스 메서드 서명이 변경되었습니다.

[WebMethod] 
public string[] HelloWorld() 
{ 
    return new[] { "Hello World" }; 
} 

을하지만 "항상 메시지 계약을 생성"으로 설정 구성 VS2008에서 '추가 서비스 참조'기능을 사용하여이 웹 서비스를 참조 할 때 내가 해봤

HelloWorldResponse HelloWorld(HelloWorldRequest request) 

: (i는 '참조 된 어셈블리에서 재사용 유형'을 확인할 때, 나는이 같은 문제를 갖고있는 것 같다 있지만), 서명은 다음에 자동 생성 된 프록시 객체에 의해 변경 될 것으로 보인다 그물에 이것을 보아라. 그러나 이것이 왜 일어나고 있는지, 그리고 내가 할 수 있는지/해야할지를 나에게 설명 할 무언가를 찾는 데 어려움이있다. 그걸 해결하려면?

또한 질문이 있습니다. "참조 된 어셈블리에서 유형 재사용"및 "항상 생성 된 메시지 계약"에 서비스 참조 구성 옵션을 선택해야하는지 여부를 어떻게 결정합니까?

답변

1

message-contracts 옵션이 적용될 수 있습니다. 기본 요청에 대한 세부적인 제어를 허용하는 것이 여기에 있습니다. 궁극적으로, 무엇 입니다 (배경 뒤에서) 요청 페이로드입니다.

reuse-types 옵션은 더 일반적으로 객체 (string[]이 아닌)와 함께 사용됩니다. 즉, Customer (말) 클래스를 100 % 일치 시키면 웹 서비스 용으로 다시 사용할 수 있습니다 프록시 유형을 생성하는 것이 아닙니다.

또한 실제로 WCF 서비스를 사용하고 있지 않습니다 ([WebMethod]은 이전 웹 서비스 스타일 임). 따라서 "웹 참조"를 사용하면 더 나은 결과를 얻을 수 있습니다. 서비스를 추가 할 때 "고급"을 누른 다음 "웹 참조 추가 ..."를 누릅니다. 이 경우 이전 UI 및 wsdl.exe를 사용하여 을 생성하고 WCF (svc)가 아닌 [WebMethod] (asmx)의 경우을 사용합니다.

[WebMethod]을 호스팅하는 대신, (서버가 3.5이기 때문에) WCF 서비스를 호스팅 할 수 있습니다. 이것은 일을 더 쉽게 만들 수 있습니다.

WCF의 최종 지점; 이 실제로 클라이언트와 서버에서 동일한 계약 인을 원할 경우 어셈블리 또는 클래스 공유를 사용하여 양쪽에서 매우 동일한 유형을 사용할 수 있습니다. 하지만 [WebMethod]에서는 지원되지 않습니다.

+0

++ 1 서비스에 WCF 사용을 제안합니다. OP : Microsoft는 ASMX를 "레거시 기술"로 간주합니다. 이미 클라이언트 용으로 사용하고 있으므로 서비스 용으로 사용해야합니다. –

관련 문제