Обмен пользовательскими объектами м/у несколькими сборками

Тема в разделе ".NET", создана пользователем *null, 25 июн 2007.

Статус темы:
Закрыта.
  1. *null

    *null Гость

    Есть несколько Web-сервисов и Windows-Application. Между ними требуется передавать экземпляр структуры. Т.е. описываем (например, в WebService1) некоторую структуру вроде:
    public struct SomeStruct

    Код (Text):
    {
    public Int32 SomeMember1;
    public string SomeMember2;
    . . .
    }
    Некоторые методы WebService1 возвращают экземпляр этой структуры. WindowsApplication вызывает эти методы, получают структуру, как то с ней работают и передают этот объект WebService2 (как аргумент методов сервиса).

    Проблема в том, что при компиляции Windows-Application получаю ошибки вроде:
    Код (Text):
    Cannot convert type WebService1.SomeStruct to WindowsApplication.SomeStruct /
    Cannot convert from WindowsApplication1.SomeStruct to WebService2.SomeStruct
    Как разрешить такую проблему, сделать данную структуру общей для всех сборок?

    Пробовал вынести ее в отдельную библиотеку, а в сервисах и приложении создать на нее ссылки. Результат примерно тот же: компилятор ругается если экземпляр структуры создавался в разных нейм-спейсах.

    Подскажите решение, плиз
     
  2. NikSoft

    NikSoft Гость

    Для: *null
    А зачем преобразовывать типы?
    Разве нельзя скопировать содержимое WebService1.SomeStruct в WindowsApplication.SomeStruct
    по полям?
     
  3. *null

    *null Гость

    Можно конечно, но не слишком "красивое" решение, imho.
    Неужели как то иначе нельзя? Хотелось бы сделать тип общим для всех сборок.
     
  4. Pasha

    Pasha Гость

    Для: *null
    Копировать по полям, с использованием Reflection. Вполне "красиво" будет.
     
  5. NikSoft

    NikSoft Гость

    Для: *null
    Можно создать сборку состояшей из одного типа(скажем типа Т) с полями из структуры.
    А затем передавать тип Т из WebService в WindowsApplication и наоборот в качестве параметра
     
  6. mr_ST

    mr_ST Гость

    В таком случае создается отельная сборка типа MyApp.Contract а которую помещаются классы/структуры/интерфейсы общие для сервера и клиента.
     
  7. Pasha

    Pasha Гость

    Контракты и общие сборки это, конечно, хорошо. Вот только клиентское приложение использует WebService через Web Service Reference. И структуры передаются/возвращаются не в виде MyApp.Contract.MyStruct, а в виде их прокси MyClentApp.MyWebReference.MyStruct.
    <!--QuoteBegin-*null+25:06:2007, 09:29 -->
    <span class="vbquote">(*null @ 25:06:2007, 09:29 )</span><!--QuoteEBegin-->Пробовал вынести ее в отдельную библиотеку, а в сервисах и приложении создать на нее ссылки. Результат примерно тот же: компилятор ругается если экземпляр структуры создавался в разных нейм-спейсах.
    [snapback]70456" rel="nofollow" target="_blank[/snapback]​
    [/quote]И собственно вопрос: можно ли стандартными средствами создать Web Service Reference, передающий сами структуры, а не их жалкое проксевое подобие.
     
  8. *null

    *null Гость

    Всем спасибо за ответы!

    NikSoft, mr_ST - именно так я и пытался сделать: вытащил в отдельную библиотеку.
    Явно прописывал namespace'ы и в клиентах и в web-сервисах. Допустим если метод сервиса возвращает
    MyLib.SomeStruct, на клиенте я создаю такой объект и пытаюсь его проинициализировать методом веб-сервиса. В результате получал ошибки из первого поста: компилятор считает что
    WebService1.SomeStruct != WindowsApplication1.SomeStruct
    хотя они и там и там объявлены как MyLib.SomeStruct.

    NikSoft, Pasha - пока обошелся копированием (без reflection), но хотелось использовать первый вариант - с общей библиотекой типов.
     
  9. Pasha

    Pasha Гость

  10. mr_ST

    mr_ST Гость

    Ну да, это совершенно разнве типы несмторя на то что они имеют одинаковые имена.
     
  11. karlito

    karlito Гость

    Либо полноценная схема, но канал придётся самому строить. Либо скорость разработки с Web Service Reference, но с убогой схемой. Стандартными средствами этого не изменить, но, как грится, было бы желание, время и конечная ценность решения. Всё зависит от самого приложения. Но если можно сделать проще, то лучше так и сделать.
     
  12. Pasha

    Pasha Гость

    Для: karlito
    Сходи по мегассылке из моего предыдущего поста. Там сказано как изменить это, причем стандартыми средствами.
     
  13. karlito

    karlito Гость

    Для: Pasha
    Менять генерённые файлы не есть хорошо и не есть стандартное средство. А за Schema Importer Extensions спасибо.
     
Загрузка...
Похожие Темы - Обмен пользовательскими объектами
  1. COrMiTzY
    Ответов:
    0
    Просмотров:
    687
  2. exchanger
    Ответов:
    0
    Просмотров:
    794
  3. VkDuty
    Ответов:
    11
    Просмотров:
    1.791
  4. Sangitam
    Ответов:
    3
    Просмотров:
    1.066
  5. YuryD
    Ответов:
    6
    Просмотров:
    1.452
Статус темы:
Закрыта.

Поделиться этой страницей