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에 전달 된 알려진 형식 목록에 추가하여 알려진 형식 목록에 정적으로 알려지지 않은 형식을 추가하는 것이 좋습니다.