Я использую метод внешнего веб-сервиса с моего веб-сайта в приложении Silverlight. который должен возвращать детали моих видео в базе данных в виде зубчатого массива. Там не должно быть никаких проблем, как я знаю.
Но любой другой метод в том же сервисе запускает завершенные события вместо этого, я также смотрел на его возвращаемое значение и его работу, как я хочу. Что я здесь не так делаю?
Вот мой веб-сервис wcf, размещенный на моем сайте;
[OperationContract]
public Object[][] compilationRequestsDetails(string ownerId, string senderId)
{
SqlConnection objConnection = new SqlConnection();
objConnection.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnStr"].ToString();
objConnection.Open();
SqlDataAdapter adapter = new SqlDataAdapter();
SqlCommand objCommand = new SqlCommand("SELECT video.id ,name, vidLength, lowPath, instruments.logo, mp3Path FROM video LEFT JOIN instruments ON video.instrumentId = instruments.id LEFT JOIN compilations ON video.compilationId = compilations.id \n"
+"WHERE video.id='"+ownerId+"' OR video.id='"+senderId+"' OR compilationId ='" +ownerId+"'");
adapter.SelectCommand = objCommand;
adapter.SelectCommand.Connection = objConnection;
SqlDataReader reader = adapter.SelectCommand.ExecuteReader();
List<Object[]> videos = new List<Object[]>();
while (reader.Read())
{
Object[] values = new Object[reader.FieldCount];
reader.GetValues(values);
videos.Add(values);
}
Object[][] result = videos.ToArray();
reader.Close();
objConnection.Close();
return result;
}
возвращается как ожидалось;
Редактировать: Благодаря carlosfigueira я обновил свой сервисный звонок следующим образом и обнаружил, что я не получаю данных в приложении silverlight.
myServiceRef.compilationRequestsDetailsCompleted +=new EventHandler<myService.compilationRequestsDetailsCompletedEventArgs>(myServiceRef_compilationRequestsDetailsCompleted);
}
void myServiceRef_compilationRequestsDetailsCompleted(object sender, myService.compilationRequestsDetailsCompletedEventArgs e)
{
if (e.Error == null)
{
MessageBox.Show("fetch ended result count:" + e.Result.Length);
}
else
{
MessageBox.Show("Error: " + e.Error);
}
и ошибка, которую он мне дает, такова;
моя эталонная конфигурация для System.Array, и ее должно быть достаточно для типа возврата Object[][]
.
Буду признателен, если вы скажете мне, почему я не получаю данные.
Проблема должна заключаться в инициализации зубчатого массива, потому что, если я напишу фиктивный массив, подобный этому, и инициализирую следующим образом, я смогу получить данные из Silverlight таким же способом;
objConnection.Close();
Object[][] j2 = new Object[][]
{
new Object[] {0,2,4,6},
new Object[] {11,22}
};
return j2;
но так и не смог найти способ правильно передать мой массив результатов в приложение.
Я решил это таким способом, который мне не очень понравился, но это сделано! Я скачал fiddler, и на стороне клиента возникла проблема с типом. Как сказала Карлосфигейра, это была проблема с systemknowntype, поэтому мне нужно было преобразовать значения в строку перед отправкой в приложение.
Спасибо за помощь!