2012-01-10 3 views
1

기존 .Net 3.5 웹 사이트에서 asmx webservice를 만들고 있습니다. 열쇠를 기반으로 한 게시물을 보내고 싶습니다. 나는 익명 형식으로 게시물을 반환하고 싶지만, 그것은 나에게 다음과 같은 오류주고있다 : Feature 'anonymous types' cannot be used because it is not part of the ISO-2 C# language specificationASMX Webservice : '익명 형식'오류

모든 아이디어 방법 : 여기

Feature 'anonymous types' cannot be used because it is not part of the ISO-2 C# language specification.

문제의 화면 덤프입니다 이거 해결해?

참고 : my asmx는 자체적으로 존재합니다. 여기에는 코드가 포함되어 있으며 그 뒤에는 .cs가 없습니다.

+1

로 변경이 대답을 참조하십시오 : 그게 해결 않습니다를? http://stackoverflow.com/a/3314483/23354 - 참고 : 이것은 컴파일러를 행복하게 만듭니다. 나는 Fredrik/Steve/Paul/Lloyd와 동의한다. ** 좋은 접근이 아니다. –

+1

구체적인 유형을 반환한다, 새로운 ConcreteType() {PostId = yada; } – Lloyd

답변

8

첫 번째 문제는 object을 반환한다는 것입니다.

WebService에서 정의 (WSDL)를 생성 할 때 실제 유형을 모른 채 어떻게 정의가 생성되기를 기대합니까?

[Serializable] 
public class Post 
{ 
    public int PostID {get;set;} 
    public int ThreadID { get; set; } 
    public string Subject { get; set; } 
    public string Body { get; set;} 
} 

와 같은 클래스를 반환하기 위해 정의를 변경 : 최고 (로직, 데이터 만) 같은 -

당신은 DTO 스타일을 소개한다.

코드 양은 매우 가벼운 편입니다.

[편집] 위의 해결 방법으로 문제가 해결됩니다. 그러나 문제의 정확한 원인은 다음과 같습니다.

.cs 파일에서 작업 할 때 사용되는 컴파일러는 프로젝트의 대상 프레임 워크 (여기 3.5)의 컴파일러입니다. 컴파일 시간에 컴파일이 발생합니다.

.asmx 파일에서 작업 할 때 asp.net 응용 프로그램을로드 할 때 컴파일이 발생합니다. 컴파일러는 asp.net 런타임의 컴파일러에서 사용되며 .Net 3.5의 경우 2.0 런타임 용 컴파일러입니다. 프레임 워크 3.5는 새로운 클래스 세트이기 때문에 CLR은 여전히 ​​V2에 있습니다 (V4로 변경됨). 이 경우 프로젝트가 3.5 인 경우에도 .cs 파일의 코드 만 3.5 언어 기능을 사용할 수 있습니다. aspx 및 asmx 파일의 모든 코드는 V2 언어 기능 만 사용할 수 있습니다.

+0

아, 그게 ... POCO 객체라고 설명합니다. –

1

나는 당신이 당신의 대답을 가지고 있다고 생각합니다.

내가 너라면, 익숙한 구조를 모델링하는 POCO (일반 오래된 C# 개체) 만 만들면됩니다.

1

WebService 기술은 서비스의 함수, 매개 변수 및 반환 유형에 대한 설명이 포함 된 WSDL이라는 XML 문서를 기반으로합니다. 귀하의 웹 서비스 클라이언트는이 문서에서 귀하의 서비스에서 기대할 수있는 것을 알고 있습니다. 반환 유형을 지정하지 않으면 문서를 만들 수 없습니다. 함수에서 특정 클래스의 객체를 반환해야합니다.

+0

나는 전에 [WebMethod] 메소드 (.Net 4)와 익명 객체를 사용했다. 완벽하게 작동했습니다 (JSON으로 변환). –

+1

할 수 있지만이 webservices 무엇을 해야하는지 생각하지 않습니다. 응답으로 얻을 수있는 것을 알고 wsdl에서 클래스를 자동 생성 할 수 있다는 것은 webservices가 http/rest 또는 pure socket communication과 같은 장점을 갖는 것 중 하나입니다. 왜 당신이 webservice를 귀찮게하고 사용하는지 원하지 않는다면? 일부 http 사이트를 만들고 게시물 요청을 수락하십시오. –

2

이 웹 사이트 또는 웹 응용 프로그램인가요?

아마도 프로젝트에서 오래된 langversion을 설정했을 것입니다. 이것

봐 : http://msdn.microsoft.com/en-us/library/f4ckecs0(v=vs.110).aspx

이 웹 사이트의 경우, 컴파일러 섹션의 web.config에 설정되어있는 것을 확인합니다. 속성이있는 경우 :

<compiler language="c#;cs;csharp" extension=".cs" compilerOptions="/langversion:ISO-2" ... > 

제거 langversion 매개 변수, 또는이

compilerOptions="/langversion:3" 
+0

내 프로젝트는 웹 사이트입니다. –

+0

웹 사이트 구성에 대한 내 대답을 편집 했습니까? :) –

+0

글쎄, 여기 사람들이 POCO 개체를 사용하기로 결정 했으므로 더 나은 접근 방법이라고 확신하게되었습니다. P –

관련 문제