2008-08-15 3 views
6

일반적인 문자열을 반환하는 대신 고전적인 개체를 반환 할 수있는 방법이 있습니까? 그렇지 않은 경우 : 모범 사례는 무엇입니까? 당신은 당신의 객체를 xml로 옮기고 반대편에있는 객체를 다시 빌드합니까? 다른 가능성은 무엇입니까?WebService에서 객체를 반환 할 수 있습니까?

답변

8

앞서 언급했듯이 직렬화를 통해 .net에서이를 수행 할 수 있습니다. 기본적으로 모든 원시 유형은 직렬화 가능하므로 자동으로 발생합니다.

그러나 복잡한 유형이있는 경우 객체를 [Serializable] 속성으로 표시해야합니다. 복잡한 유형의 속성도 마찬가지입니다.

그래서 예를 들어, 당신은해야합니다

[Serializable] 
public class MyClass 
{ 
    public string MyString {get; set;} 

    [Serializable] 
    public MyOtherClass MyOtherClassProperty {get; set;} 
} 
3

예 : .NET에서이 클래스는 개체를 XML로 직렬화 한 다음 소비하는 서비스에서 다시 원래 개체 유형 또는 동일한 데이터 구조를 갖는 대리자로 재구성하는 직렬화를 호출합니다.

5

개체를 XML로 직렬화 할 수 있고 WSDL에서 설명 할 수 있다면 예, 웹 서비스에서 개체를 반환 할 수 있습니다.

2

: 여기

는 .NET에서 객체 직렬화에 대해 이야기 기사입니다 어떤 언어이든간에, 나는 그 언어로 파서/객체 트랜스 포저를 생성하기 만하면된다.

서비스를 설명하는 WSDL 파일이 있기 때문에 일부 시스템에서는 거의 자동화되어 있습니다.

(예를 들어, C로 작성된 서버, C++/gSOAP로 작성된 클라이언트 및 Cocoa/Objective-C로 작성된 클라이언트를 대체하는 pure python으로 작성된 서버가 있습니다. 우리는 soapUI를 테스트로 사용합니다 프레임 워크, 자바로 작성).

2

XML을 사용하여 웹 서비스에서 객체를 반환 할 수 있습니다. 그러나 웹 서비스는 플랫폼 및 운영 체제에 무관심해야합니다. 객체를 직렬화하면 파일과 같은 바이트 스트림에서 객체를 저장하고 검색 할 수 있습니다. 예를 들어, Java 객체를 직렬화하고, 이진 스트림을 Base 64 인코딩을 통해 CDATA 필드로 변환 한 다음 서비스의 클라이언트로 전송할 수 있습니다.

그러나 클라이언트는 Java 기반 개체 인 경우에만 해당 개체를 복원 할 수 있습니다. 또한 개체를 직렬화하고 정확하게 복원하려면 전체 복사본이 필요합니다. 깊은 사본은 비쌀 수 있습니다.

가장 좋은 방법은 문서를 나타내는 XML 스키마를 만들고 해당 개체의 인스턴스로 해당 스키마의 인스턴스를 만드는 것입니다.

1

@ 브라이언 : 자바에서 어떻게 작동하는지 모르지만 .net 객체는 base64 문자열이 아닌 XML로 직렬화됩니다. webservice는 웹 서비스에 필요한 메소드 및 객체 정의를 포함하는 wsdl 파일을 게시합니다.

나는 아무도 단순히 다른 사람들이 말했듯이 base64로 문자열

0

을 만들 웹 서비스를 생성 없다는 것을 희망, 그것은 가능하다.그러나 서비스와 클라이언트가 모두 도메인 동작이 동일한 객체를 사용하는 경우, 처음에는 서비스가 필요하지 않았을 것입니다. 다른 사람이 말했듯이

0

, 그것은 가능하다. 그러나 서비스와 클라이언트가 쪽 모두 정확히 동일한 도메인 동작을 가진 개체를 사용하는 경우 처음에는 서비스가 필요하지 않은 것 같습니다.

다소 좁은 설명이므로이 내용에 동의해야합니다. 도메인 객체를 XML로 직렬화 할 수있는 웹 서비스를 사용하면 동일한 도메인 객체로 작업하는 클라이언트가 쉽게 사용할 수 있지만 해당 클라이언트가 노출 된 특정 웹 서비스를 사용하는 것으로 제한된다는 것을 의미합니다. 다른 클라이언트가 도메인 객체에 대해 알지 못하지만 XML을 통해 서비스와 상호 작용할 수 있도록하여 역순으로 지정하십시오.

1

다니엘 오거는 : 다른 사람이 말했듯이
것이 가능하다. 그러나 서비스와 클라이언트가 쪽 모두 정확히 동일한 도메인 동작을 가진 개체를 사용하는 경우 처음에는 서비스가 필요하지 않은 것 같습니다.

맥스 : 그것은 다소 좁은 주석의로 나는이 동의해야합니다. XML이는 같은 도메인 객체로 작업 클라이언트 그것을 쉽게 것을 의미하지만, 그것은 또한 특정 웹 서비스 를 사용하는 클라이언트가 로 제한됩니다 의미에 도메인 객체를 직렬화 할 수있는 웹 서비스를 사용하면 ' 노출 된 적이 그리고 그것은 또한 도메인 객체에 대한 지식이 없다하지만 여전히 XML을 통해 서비스와 상호 작용 에 다른 클라이언트를 허용하여 역으로 작동합니다.

맥스 @

: 당신은 두 가지 시나리오를 설명했습니다. 시나리오 1 : 클라이언트가 xml 메시지를 정확히 동일한 도메인 개체로 다시 채우고 있습니다. 저는 이것을 "객체를 반환하는 것"이라고 생각합니다. 내 경험상 이것은 나쁜 선택이며 아래에서이 점을 설명 할 것입니다. 시나리오 2 : 클라이언트는 동일한 도메인 객체가 아닌 다른 무언가로 XML 메시지를 재수 : 나는 그러나 나는이 도메인 객체를 반환 할 생각하지 않는다, 100 % 배후입니다. 실제로 메시지 나 DTO를 보내고 있습니다.

이제 웹 서비스에서 true/pure/not DTO 객체 직렬화가 인 이유는 무엇입니까? 나쁜 아이디어입니다. 주장 : 첫 번째 장소에서이 작업을 수행하기 위해, 당신이 중 하나는 클라이언트와 서비스 모두의 소유자, 또는 사실 유형의에 그들이 개체를 다시 재수 할 수 있도록 사용하는 라이브러리와 클라이언트를 제공해야합니다. 문제 : 유형으로이 도메인 객체는 이제 두 개의 준 관련 도메인에 존재하며 두 개의 준 관련 도메인에 속합니다. 시간이 지남에 따라 다른 도메인에서 의미가없는 하나의 도메인에 동작을 추가해야 할 수 있으며 이로 인해 오염 및 잠재적으로 고통스러운 문제가 발생할 수 있습니다.

나는 보통 이렇게하는 압도적 인 이유가있을 때 난 단지 시나리오 1을 사용 시나리오 2. 기본.

나는 처음 대답에 너무 간절히 여겨서 사과드립니다. 나는 이것이 내 견해만큼이나 일을 깨끗이 해주기를 바란다. Lomax, 그것은 우리가 동의하는 것처럼 보일 것입니다;).

1

JSON은 자바 스크립트의 하위 집합으로 웹에서 객체를 전달하는 꽤 일반적인 방법입니다. 많은 언어에는 JSON 코드를 기본 객체로 변환하는 라이브러리가 있습니다 (예 : simplejson, Python 참조).

JSON 용 라이브러리에 대한 자세한 내용은 JSON webpage

을 참조하십시오.
관련 문제