powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Изменение типа при генерации прокси класса
4 сообщений из 4, страница 1 из 1
Изменение типа при генерации прокси класса
    #38866632
Degun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть клиентское приложение, в котором осуществляется доступ к wcf-службе. Wcf-служба следующая:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
namespace ServicesFacade
{
  [ServiceContract]
  public interface IService1
  {
    [OperationContract]
    List<CompositeType> GetAll();
  }

  [DataContract]
  public class CompositeType
  {
    bool boolValue = true;
    string stringValue = "Hello ";

    [DataMember]
    public bool BoolValue
    {
      get { return boolValue; }
      set { boolValue = value; }
    }

    [DataMember]
    public string StringValue
    {
      get { return stringValue; }
      set { stringValue = value; }
    }
  }
}


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
namespace ServicesFacade
{
  public class Service1 : IService1
  {
    public List<CompositeType> GetAll()
    {
      List<CompositeType> ret = new List<CompositeType>();
      ret.Add(new CompositeType() { BoolValue = false, StringValue = "false" });
      ret.Add(new CompositeType() { BoolValue = true, StringValue = "true" });
      return ret;
    }
  }
}



Но в файле прокси класса, который необходим для доступа к этой службе и получаемый с помощью утилиты svcutil.exe, метод GetAll() имеет следующий вид:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(ConfigurationName="IService1")]
public interface IService1
{
    [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/GetAll", ReplyAction="http://tempuri.org/IService1/GetAllResponse")]
    ServicesFacade.CompositeType[] GetAll();
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
public partial class Service1Client : System.ServiceModel.ClientBase<IService1>, IService1
{
........    
    public ServicesFacade.CompositeType[] GetAll()
    {
        return base.Channel.GetAll();
    }
}



Почему он получается таким, а не следующим:
Код: c#
1.
2.
3.
4.
    public System.Collections.Generic.List<ServicesFacade.CompositeType> GetAll()
    {
        return base.Channel.GetAll();
    }


Т.е. почему List<CompositeType> автоматически заменяется массивом элементов CompositeType[]? Как отключить такую автоматическую конвертацию?
...
Рейтинг: 0 / 0
Изменение типа при генерации прокси класса
    #38866642
Sergey TSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Degun,

При определении операции службы, использующей любой из следующих интерфейсов коллекций: IEnumerable<T>, IList<T> и ICollection<T>, в канальном представлении всегда будет задействован массив.
Джувел Лёве, Создание служб WCS. Глава 3. Раздел "Коллекции".


Можно использовать CollectionDataContractAttribute .
...
Рейтинг: 0 / 0
Изменение типа при генерации прокси класса
    #38866732
Degun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey TSV,

Дело в том, что вопрос бы не возник, если бы до меня у человека, который разрабатывал слиентское приложение, в проксе файле метод GetAll() не возвращал бы именно System.Collections.Generic.List<ServicesFacade.CompositeType>!
Как он этого добился? Может быть есть какой-то другой способ получить прокси-класс, кроме как через svcutil.exe или добавив в приложение ссылку на wcf-сервис?

PS: клиентское приложение типа ASP .NET MVC 4
...
Рейтинг: 0 / 0
Изменение типа при генерации прокси класса
    #38866745
Sergey TSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Degun,

В той же книге описано как восстановить (не конвертировать в массив) коллекцию с помощью ключа /ct для SvcUtil.
Еще вариант - отредактировать самому.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Изменение типа при генерации прокси класса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]