2012-02-12 2 views
1

wcf에서 중첩 된 hastable을 만들 때 "기본 연결이 닫혔습니다 : 연결이 예기치 않게 닫혔습니다."라는 오류가 나타납니다. 어디에 문제가 있는지 알 수 없습니다. TraceListener에서이중첩 된 해시 테이블 보내기

유형 'System.Collections.Hashtable []'데이터 계약 이름 'ArrayOfArrayOfKeyValueOfanyTypeanyType이다에서

클라이언트 코드

private static List<Playlist> remotePlaylistArray; 
    private static List<Playlist> _PlaylistArray; 
    public static List<Playlist> PlaylistArray 
    { 
     get 
     { 
      if (_PlaylistArray == null) 
      { 
       _PlaylistArray = myClient.GetPlaylists(Username, Password, (int)UserInf["id"], "%").Select(i => new Playlist 
       (
        i["name"].ToString(), 
        true, 
        ((Hashtable[])i["medias"]) == null ? null : 
        ((Hashtable[])i["medias"]).Select(ix => new YoutubeMedia() 
        { 
         Duration = ix["duration"].ToString(), 
         Title = (string)ix["title"], 
         ID = (string)ix["videoinf"] 
        }).ToArray() 
       ) { ID = (int)i["id"] }).ToList();//The underlying connection was closed: The connection was closed unexpectedly. 

       remotePlaylistArray = new List<Playlist>(_PlaylistArray); 
      } 

      return _PlaylistArray; 
     } 

서비스 코드

public IEnumerable<Hashtable> GetPlaylistItems(string username, string password, int pid) 
    { 
     return this.ExecuteHashtable("GetPlaylistItems", username, Crypter.DoTwiceMD5(password), pid); 
    } 

    public IEnumerable<Hashtable> GetPlaylists(string username, string password, int userid, string filter) 
    { 
     List<Hashtable> list = this.ExecuteHashtable("GetPlaylists", username, Crypter.DoTwiceMD5(password), userid, filter).ToList(); 

     foreach (var item in list) 
     { 
      Hashtable[] arr = GetPlaylistItems(username, password, (int)item["id"]).ToArray(); 
      item.Add("medias", arr.Length != 0 ? arr : null); 
     } 

     return list; 
    } 

예외가 온다 : HTTP : //schemas.microsoft.com/2003/10/Serialization/Arrays '가 필요하지 않습니다. DataContractResolver를 사용하거나 KnownTypeAttribute 특성을 사용하거나 DataContractSerializer에 전달 된 알려진 형식 목록에 추가하여 알려진 형식 목록에 정적으로 알려지지 않은 형식을 추가하는 것이 좋습니다.

답변

0

귀하의 경우에는 HashTable이 직접 직렬화되지 않기 때문에 실제로 HashTable을 반환해야하는 경우 사용자 지정 직렬 변환기를 작성해야합니다.

한 가지 질문 : 서버 쪽에서 재생 목록 유형을 알고 있습니까? 그렇다면 해시 테이블 대신 목록을 반환하는 것이 좋습니다 ...