powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF: рекурсивный вызов сервиса.
5 сообщений из 5, страница 1 из 1
WCF: рекурсивный вызов сервиса.
    #38474817
Jovanny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!
Есть WCF-сервис.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
[ServiceContract(ConfigurationName="WebEntityService")]
[ServiceKnownType(typeof(WcfEntityService.TH.Category))]
public interface IEntityService {
    [OperationContract(IsOneWay=true)]
    void ScanEntity(ScanInfo scanInfo, WebEntityBase entity);
}

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
[KnownType(typeof(WcfEntityService.TH.Category))]
public class EntityService : IEntityService {
   [OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
   public void ScanEntity(ScanInfo scanInfo, WebEntityBase entity) {
       try {
           WebScanner webScanner = new WebScanner(entity);
           webScanner.Scan(scanInfo);
           }
       catch (Exception ex) {
                throw;
            }
        }



Класс WcfEntityService.TH.Category наследуется от WebEntityBase и расположен в другой сборке.
В нём есть метод, рекурсивно вызывающий ScanEntity.
Проблема: при рекурсивном вызове ScanEntity возникает ошибка сериализации.
There was an error while trying to serialize parameter http://tempuri.org/:entity. The InnerException message was 'Type 'WcfEntityService.TH.Category' with data contract name 'Category:http://schemas.datacontract.org/2004/07/WcfEntityService.TH' is not expected. Consider using a DataContractResolver or add any types not known statically to the list of known types - for example, by using the KnownTypeAttribute attribute or by adding them to the list of known types passed to DataContractSerializer.'. Please see InnerException for more details.


[KnownType] присутствует.
Подскажите, куда копать?
...
Рейтинг: 0 / 0
WCF: рекурсивный вызов сервиса.
    #38476253
Sergey TSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Jovanny,

С атрибутами напутали. Например, KnowTypeAttribute применяется к контрактам данных, а не к службе ( MSDN ).
...
Рейтинг: 0 / 0
WCF: рекурсивный вызов сервиса.
    #38478701
Jovanny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey TSV,

В общем-то KnownType там лишний. Достаточно
Код: c#
1.
[ServiceKnownType(typeof(WcfEntityService.TH.Category))]



Но проблема остаётся. Почему сервис не понимает тип WcfEntityService.TH.Category при рекурсивном вызове,
в то время как при внешнем вызове всё работает?
...
Рейтинг: 0 / 0
WCF: рекурсивный вызов сервиса.
    #38479386
Sergey TSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема скорее в том коде, который здесь не показан. Что такое WcfEntityService.TH.Category? Контракт данных? Контракт службы?
Судя по этому коду, это контракт данных, тогда смущает следующее:
JovannyВ нём есть метод, рекурсивно вызывающий ScanEntity.

При такой постановке вопроса мало кто поможет...
...
Рейтинг: 0 / 0
WCF: рекурсивный вызов сервиса.
    #38479407
Jovanny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, WcfEntityService.TH.Category - это контракт данных.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
namespace WcfEntityService.TH {
    [DataContract(IsReference = true)]
    public class Category : WebCategory, IWebEntity {
        public override void Processing(WebContent content, ScanInfo scanInfo) {
                //....
                ScanInfo categoryScanInfo = new ScanInfo(scanInfo);
                Category category = new Category();
                //....
                using (EntityServiceClient client =
                    new ("BasicHttpBinding_IEntityService ")) {
                    client.ScanEntity(categoryScanInfo, category);
                    client.Close();
                }
            }
        }



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


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