| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Несовместимость собственных классов |
| Автор: azz 27.3.2007, 13:19 |
| Скажем у меня есть класс LetterInfo - Сереалезуемый только за счет <Serializable()> в начале. Он находится в нэймспейс olexiy.shared, и используется как пораметр для WebMetod. Но почемуто когда я пытаюсь вызвать метод из клиента то получаю несовместимость типов olexiy.LetterInfo и olexiy.LocalPostServer.LetterInfo. Почему и что мне делать??? |
| Автор: ivashkanet 27.3.2007, 13:33 |
| azz, сериализация бинарная? Тогда недостаточно, чтобы совпадала сигнатура классов, нужно чтобы это был один и тот же класс из той же самой сборки |
| Автор: Naum 27.3.2007, 13:35 |
| ivashkanet, что значит "бинарная"? А какие еще могут быть? |
| Автор: ivashkanet 27.3.2007, 13:41 | ||
| Naum, XML XML съест все что угодно, лишь бы поля принимающего класса соответствовали и, возможно, имя класса. Она не пишет никакие данные о классе и сборке. Вот пример сериализации класса Settings
Как видно никаких данных кроме названия класса, и сериализованных данных нет |
| Автор: azz 27.3.2007, 13:42 |
| Насколько я знаю в случае с WS сереализация всегда в XML. Класс один и тот же. У меня папка из 3-х проектов: клиент, сервер и общая, где лежат файлы которые должны иснользаватся обоими. С Enum например проблем нет |
| Автор: ivashkanet 27.3.2007, 13:54 |
А как тогда неймспейсы стали разными? Ошибку в студию |
| Автор: azz 27.3.2007, 14:01 | ||
А вот это и является собственно моим вопросом. Ошибка : (не неметском языке) Der Wert vom Typ "olexiy.Shared.LetterInfo" kann nicht zu "olexiy.EMPost.LocalPostServer.LetterInfo" konvertiert werden |
| Автор: azz 27.3.2007, 15:07 |
| Да блин в том то и дело!!!!! Вот WS: Imports olexiy.shared ..... <WebMetod()>_ Public Sub PostLetter(ByVal info as LetterInfo) .... End Sub Вот клиент private mPostService as LocalPostService.Service public sub SendLetter(ByVal info as LetterInfo) mPostService.PostLetter(info) end sub как видеш один и тот клже класс |
| Автор: ivashkanet 27.3.2007, 15:25 | ||
НЕ ВИЖУ С точки зрения управляющей среды это разные классы. Ну и что, что ты знаешь, что это одно и то же. Ну и что, что ты просто скопипастил код одного в другой. Для машины они разные!!!!
Создавай dll, ложи в нее общие классы и используй их на клиенте и на сервере. Если планируешь менять классы, то лучше выдели необходимый интерфейс и реализуй его в обоих классах |
| Автор: azz 27.3.2007, 15:58 |
| Блииииииин!!!!!да я так и сделал!!!!!!! Ти издеваешса или хе понимаеш????? У мена есть толко один клвсс. а WS ego naruju kak drugoj vidaet. Sam poprobuj |
| Автор: arilou 27.3.2007, 16:18 | ||
Это потому что из клиента ты общаешься не с самим классом, а с его прокси, который создается автоматически при добавлении web reference в проект. По идее, когда ты добавляешь эту ссылку, все необходимые тебе для работы классы автоматом генерятся, и ставить ссылку на olexiy.shared не надо. |
| Автор: azz 27.3.2007, 16:22 |
| то есть вариант - использовать в клиенте только прокси?? |
| Автор: ivashkanet 27.3.2007, 16:48 | ||
Я конечно дико извиняюсь, но как я мог понять, что ты так и делаешь????? Из твоего куска кода не понятно что это один объект. Из ошибки видно, что это разные объекты!!!!! А это потому, что ты один из классов в ошибке твой, а второй --- прокси (я это не знал, но arilou). Ты мог сказать, что не создавал "olexiy.EMPost.LocalPostServer.LetterInfo"? P.S. Каждую толику информации из тебя нужно вытягивать клещами. |
| Автор: arilou 27.3.2007, 16:52 |
Да. |
| Автор: azz 28.3.2007, 12:07 |
| А если в класе кроме свойств и функции есть, будет работаь? |
| Автор: mr.DUDA 28.3.2007, 17:09 |
| Как показала практика, класс сгенерированный с пом. wsdl (или в студии) из веб-сервиса, ничем кроме имён свойств не относится к классу, который юзается на сервере. |