|
Проблема с подключением WindowsPhone 8 и SQL Server через WCF.
|
|||
---|---|---|---|
#18+
Вот какая ситуация: 1.Есть WCFсервис в котором созданы Linq to SQL классы и методы для ввода/вывода данных из БД (MS SQL 2012 Express), сам сервис размещен на фришном ASP-хостинге. 2.В БД есть таблицы Users (описывает пользователя (id_user, login,password)), Songs(описывает песню (id_song,song_name)) и UsersSongs(описывает какой пользователь какую песню слушает, таблица, которая связывает Users и Songs (id_user,id_song)), связаны они между собой через CONSTAINT FOREIGN KEY по айдишникам. 3.Есть простое приложение на винфоне, к которому ссылкой подключен этот WCF сервис, в нем листбокс, в который подгружаются данные из таблицы Users. Суть проблемы. Когда я заполняю какими-то данными таблицы Users или Songs - все нормально, приложение на винфоне нормально подгружает WCFсервис и через него получает данные из БД, но стоит мне ввести какие-нибудь данные в UsersSongs, то при попытке вызвать любой метод работы с БД - вылетает ошибка: An exception of type 'System.ServiceModel.CommunicationException' occurred in System.ServiceModel.ni.dll but was not handled in user code. Additional information: The remote server returned an error: NotFound. Когда данных в UsersSongs нет - все работает. Вот код WCF-сервиса: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Код WinPhone приложения: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Ну и на всякий пожарный - кусок XAMLа: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Вот еще SQL-код, что бы было понятнее. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2014, 15:55 |
|
Проблема с подключением WindowsPhone 8 и SQL Server через WCF.
|
|||
---|---|---|---|
#18+
Zakary, С большой вероятностью, к Windows Phone ваша проблема отношения никакого не имеет. Я не работал конкртено с LinqToSQL (кстати, а почему именно этот Framework - он уже давно признан deprecated и не развивается?), но думаю, общий подход там такой же как в Entity Framework и NHibernate - для загрузки связанных сущностей создаются proxy-классы (обычно "на лету" в runtime) которые и отвечают за подгрузку связанных сущностей. WCF про этот класс не знает и не может его сериализовать (а может он и несериализуемый). Подозреваю, что выглядит все так: когда вы заполняете порознь пользователей и музыку, то связи нет и поле отвечающее за связь получает значение Null. Проблем c сериализацией нет. Но как только появляется запись в таблице-связке, в поле для связи присваивается класс-proxy и WCF спотыкается на его сериализации. Для того чтобы точно узнать, в чем проблема - включите трассировку на стороне сервиса . Другой момент, что если выяснится, что я прав и дело в этом хитром классе, то не факт, что вы сможете легко и просто разрешить проблему. В частности, для решения такого рода задач часто используют Data Contract Surrogates , но в большинстве случаев используют и на стороне сервиса, и на стороне клиента. А вот поддерживает ли версия WCF для WP8 суррогаты - это большой вопрос. Впрочем, для начала давайте-таки установим причину происходящего (см. трейсинг) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2014, 12:34 |
|
|
start [/forum/topic.php?fid=19&fpage=9&tid=1396985]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
others: | 257ms |
total: | 380ms |
0 / 0 |