Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблема с приведением типа 
:(
    Опции темы
Demokratizator
Дата 28.6.2007, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 25.7.2006

Репутация: нет
Всего: нет



Добрый день.

Такая ситуация: есть Web сервис, написанный на C#. есть класс на подобие:

Код

namespace MSOfficeReports
{
   public class ReportTemplateProvider
    {
        private static string _templatesDir;

        internal ReportTemplateProvider()
        {
            _templatesDir = "123-123-123";
        }

        internal ReportTemplateProvider(string _dir)
        {
            templatesDir = _dir;
        }

        public virtual byte[] GetTemplate()
        {
            return null;
        }

        protected static byte[] GetByteArray(string _fileSourseName)
        {
            return null;
        }
    }

    public class Report1TemplateProvider : ReportTemplateProvider
    {
        public Report1TemplateProvider(string _dir) : base(_dir)
        {}
        
        public Report1TemplateProvider() : base()
        { }

        public override byte[] GetTemplate()
        {
            return GetByteArray("Report1.xlt");
        }
    }
}
..................................
метод веб сервиса
namespace WebService
{
    [WebMethod]
    public byte[] GetTemplateFile(ReportTemplateProvider _rtProvider)
    {
        return _rtProvider.GetTemplate();
    }
}


клиент (WinForms) написан на Visual Basic
т.е. вызывается метод веб сервиса 

Код

Public ReadOnly Property Report1() As Object
    Get
       Return _lpsService.GetTemplateFile(New Report1TemplateProvider())
    End Get
End Property


и вот вылезает ошибка Method invocation failed because 'Public Function GetTemplateFile(_rtProvider As ReportTemplateProvider) As Byte()' cannot be called with these arguments: Argument matching parameter '_rtProvider' cannot convert from 'Report1TemplateProvider' to 'ReportTemplateProvider'.
т.е. как я понял не может провести приведение типов.
Как пофиксить это?

Это сообщение отредактировал(а) Demokratizator - 28.6.2007, 11:52
PM MAIL   Вверх
teRmit
Дата 28.6.2007, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


забытый...
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 15.6.2004
Где: Санкт-Петербург

Репутация: нет
Всего: 9



У тебя в функции GetTemplateFile стоит тип параметра ReportTemplateProvider, а передаешь туда параметр типа Report1TemplateProvider.
Наверное, ты хотел сделать так: 
Код


public byte[] GetTemplateFile(Report1TemplateProvider _rtProvider)

но перепутал имена классов, единичка незаметная smile

Это сообщение отредактировал(а) teRmit - 28.6.2007, 15:40
--------------------
Жизнь не настолько длинна, чтобы можно было долго терпеть...
PM ICQ   Вверх
Demokratizator
Дата 28.6.2007, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 25.7.2006

Репутация: нет
Всего: нет



нееет =) в этом то вся и фишка. Report1TemplatePrivider - унаследован от Report1TemplatePrivider. поэтому это то правильно, вот почему то при вызове из бейсика - не хотит
PM MAIL   Вверх
stab
Дата 29.6.2007, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 1
Всего: 48



приведённые код какой-то уж слишком обрезанный. ReportTemplateProvider\Report1TemplateProvider по значению передаётся или по ссылке? ни Serializable, ни MarshalByRefObject\ContextBoundObject нет. сервер знает что такое Report1TemplateProvider? представь: серверу приходит soap-сообщение, где фигурирует класс Report1TemplateProvider, как минимум у сервера должны быть метаданные о нём, как максимум - сборка с реализацией.


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
tol05
Дата 29.6.2007, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 6
Всего: 170



мне кажется, причина в том, что у базового класса есть приватные поля...
Веб-сервисы при передаче параметра веб-метода серилизуют только открытые (public) члены. Поэтому сервер и не может сделать преобразование типа.
Попробуй поменять у _templatesDir "private" на "public"

Что получится?


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0859 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.