2011-02-08 2 views
7

다음과 같은 서명이있는 웹 메서드가 있습니다.문자열 [] 대신 ArrayOfString을 생성하는 서비스 참조를 중지 할 수 있습니까?

public string[] ToUpper(string[] values) 

Visual Studio 2010에서 '서비스 참조 추가'를 사용하여 내 서비스에 대한 참조를 생성하고 있습니다. 불행히도이 프로세스는 'ArrayOfString'이라는 프록시 클래스를 생성하고 예상되는 'string []'유형 대신이 유형을 사용합니다. 생성 된 비동기 서비스 호출 서명은 다음과 같이 보입니다.

public void ToUpperAsync(Demo.ServiceReference.ArrayOfString values) { } 
public void ToUpperAsync(Demo.ServiceReference.ArrayOfString values, object userState) { } 

구성 서비스 참조 양식에서 '콜렉션'드롭 다운의 모든 옵션을 시도했지만 차이가없는 것처럼 보입니다.

이것은 이전에 작동했지만 어떤 이유로 서비스에서 다른 웹 메소드를 제거한 후 갑자기 작동을 멈췄습니다.

생성 된 ArrayOfString 유형 대신 [] 유형의 문자열을 사용하도록 생성 된 서비스 참조 클래스를 얻으려면 어떻게해야합니까? 이것에 대한 도움은 크게 감사 할 것입니다.

EDIT : @Oleg이 제시 하듯이 ASMX 웹 서비스를 사용하고 있습니다.

+0

아마도 서비스 메서드가 문자열 목록을 반환합니다. http : // stackoverflow를 확인하십시오.com/questions/505943/can-i-stop-my-wcf-generation-arrayofstring 대신 문자열 또는 목록 문자열 – VinayC

+0

@VinayC : 저자가이 질문을 먼저 읽었지만, 그의 두 가지 질문. 나는 "ArrayOfString을 생성하지 않도록 지시하는 방법이 있습니까?"라는 질문에 대한 대답을 알고 싶습니다.이 대답은 해당 게시물에서 대답하지 않았습니다. –

답변

5

"서비스 참조"를 ASMX 스타일 웹 서비스에 추가 할 때 문제점을 재현 할 수 있습니다. 그러나 WCF 서비스에 "서비스 참조"를 추가하거나 ASMX 서비스 인수에 "웹 참조"를 추가하는 것이 string [] 유형입니다.

이 글에 따르면 "서비스 참조"를 "웹 참조"로 대체하여 문제를 해결할 수 있다고 생각합니다.

"서비스 참조 추가 대화 상자"에서 "고급 ..."버튼을 누릅니다. Add service reference

을 눌러 ... Advanced

삽입 서비스 URL을 "... 웹 참조를 추가"웹 참조 추가 Add web reference

+0

@Oleg : "웹 참조"는 Microsoft에서 "기존 기술"로 간주하는 이전 ASMX 기술을 사용합니다. –

+0

@ 존 : 100 % 맞습니다.하지만 Luke Baulch는 이미 ASMX 웹 서비스를 제공하고 있습니다. 내 답변에서 언급했듯이 문제는 ASMX 서비스에서 "서비스 참조"를 사용할 때만 재현 가능합니다. WCF 서비스로 모든 것이 OK입니다. 그래서 ASMX 서비스를 사용한다고 가정하고 "서비스 참조"대신 "웹 참조"를 제안했습니다. 레거시 ASMX 서비스가 사용된다고 생각하는 또 다른 이유는 "웹 메소드"는 언급되었지만 "운영 계약"은 언급되지 않는다는 것입니다. –

+0

@Oleg : "두 가지 잘못은 옳지 않습니다." ASMX가 servide에서 사용되었다고해서 그것이 클라이언트 측에서 사용되어야한다는 것을 의미하지는 않습니다. –

2

을 너무 늦었지만 미래에 사람들을 도울 수

svcutil을 사용하고 프록시 클래스를 XmlSerializer으로 직렬화하고 DataContractSeri는 직렬화하지 않도록 명령 줄 유틸리티에 명시 적으로 알립니다. alizer (기본값). /out:c:\Path\Proxy.cs /config:c:\Path\Proxy.config/비동기/시리얼 라이저는 svcutil

: XmlSerializer를/네임 스페이스 : 여기에 샘플입니다 *,

YourNamespace http://www.domain.com/service/serviceURL.asmx 웹 서비스는 ASP.NET 웹 서비스입니다.

11

XmlSerializer에 대한이 변경은 Reference.svcmap 파일 내에서 수행 할 수 있습니다. Service Reference 폴더에서 열어서 Serializer xml 노드를 "Auto"에서 "XmlSerializer"로 변경하면 문제가 해결됩니다! 건배

+0

완벽합니다. 어리석은 "ArrayOfXXX"를 목록 에 나열하고 레거시 기술을 사용하지 않습니다. 좋은 하나 :) –

+0

이것은 나를 도왔습니다! 고맙습니다! – AndeeC

+0

이렇게하면 나에게도 문제가 해결되었습니다. 고맙습니다! :) – Leonard

관련 문제