2014-01-06 5 views
0

클라이언트는 서비스를 실행하는 데 필요한 매우 오래된 .net 1.1 앱이 있습니다. 나는 서비스를 히트하는 4.0에서 중간 부분을 만들었고 데이터를 반환하려고 시도하고있다. 내가 만든 클래스는 generic리스트에 접근 할 수 없기 때문에 ArrayList를 사용한다. 클라이언트가 내 코드를 사용할 때 ArtayLists는 ArrayOfAnyType으로 나오고 각각 Sub New()로 초기화 했음에도 불구하고 CLIENT 측에서 초기화해야합니다. 클라이언트가 모든 arraylist를 초기화해야하는 것을 원하지 않습니다. 눈에 띄는 코드는 다음과 같습니다.ArrayList가 웹 서비스에서 초기화되지 않는 이유는 무엇입니까?

<Serializable()> _ 
Public Class XApplication 

    Public Sub New() 
     _People = New ArrayList 
     _PhysicalHouseholds = New ArrayList 
     _TaxReturns = New ArrayList 
    End Sub 

    Public Property People() As ArrayList 
    Public Property PhysicalHouseholds() As ArrayList 
    Public Property TaxReturns() As ArrayList 
End Class 

XmlInclude 특성을 사용하여 클래스 형식을 정의하려고 시도했지만 효과가 없습니다. 분명히하려면 WCF를 사용할 수 없습니다. 웹 서비스를 사용해야합니다.

답변

0

웹 참조에서 클라이언트 프록시를 생성 할 때 프록시는 데이터를 모델링합니다. 구현 코드 (생성자 포함)는 WSDL에서 가져올 수 없습니다. 따라서 프록시 클래스의 새 인스턴스가 만들어지면 속성에는 기본값이 있습니다.

+0

나는 스튜어트에게 감사 드린다. 그러나 나는 혼란 스럽다. 전에 ArrayList를 한번도 넘지는 않았지만, Class를 Object로 통과 시켰고 같은 문제를 일으켰지 만 그렇지 않은 것 같습니다. –

+0

Apols -이 사실을 제대로 이해하지 못했을 수 있습니다. (.Net 4,하지만 @WebService를 사용하여) 서비스를 게시하고이를 1.1 웹 참조로 사용하고 마법사에서 프록시 클래스를 생성하도록 남겨두고 있는지 확인할 수 있습니까? 유형을 공유하지 않는다면 대개 서버에서 사용하는 기술은 중요하지 않습니다. 클라이언트는 WSDL에서 자체 프록시를 생성합니다. 'List '을 서버에 공개 할 수도 있습니다. 1.1 클라이언트는 데이터를 비 직렬화 할 사용자 정의 클래스 (미친 이름 임에도 불구하고)를 생성해야합니다. – StuartLC

+0

당신이 묘사 한 것이 맞습니다. 방금 돌아가서 웹 서비스를 통해 클래스를 보내는 오래된 코드를 확인했습니다. 이 클래스에는 클래스 인 속성이 있습니다. 하위 새에서는 해당 클래스를 초기화합니다. 내가 (코드 소비) 다른 쪽 끝에서 얻을 때 나는 최상위 수준 클래스를 instaniate 필요합니다. 클래스 인 모든 속성을 초기화 할 필요는 없습니다. 차이점은 클래스이고 arraylists는 아니지만 여전히 코드를 인스턴스화 할 필요가 없습니다. –

0

항상 클라이언트 측에서 개체를 만들어야합니다.

웹 서비스를 통해 개체를 보낼 수 없습니다. 전송되는 메시지는 일반 텍스트이므로 모든 객체는 포함 된 텍스트 표현으로 전송되어야하며 텍스트를 파싱하고 새 객체에 데이터를 저장하여 클라이언트 측에서 다시 작성해야합니다.

관련 문제