Отправить сеанс devExpress в качестве параметра в службу wcf

У меня есть исключение, когда я хочу отправить сеанс devExpress в составном типе в WCF. Я пытался сделать его сериализуемым, но все равно получаю ошибку

информация: Тип System.Data.SqlClient.SqlConnection с именем контракта данных SqlConnection:http://schemas.datacontract.org/2004/07/System.Data.SqlClient не ожидается. Рассмотрите возможность использования DataContractResolver, если вы используете DataContractSerializer, или добавьте какие-либо типы, которые не известны статически, в список известных типов — например, с помощью атрибута KnownTypeAttribute или путем добавления их в список известных типов, передаваемых сериализатору.

Это DataContract, который я использовал.

[DataContract] 
[Serializable] 
[ServiceKnownType(typeof(Session))] 
[ServiceKnownType(typeof(SqlConnection))] 
[ServiceKnownType(typeof(SqlParameter))] 
public class CompositeType 
{
 Session sValue ; 
 [DataMember] 
 public Session SessionValue 
 { get {return sValue; } set {sValue = value; } } 

  }

Я также использую метод, который отправляет этот класс в качестве параметра

void GetDataUsingDataContract(CompositeType composite); 

person Nouha    schedule 23.03.2020    source источник
comment
Не могли бы вы предоставить дополнительную информацию о данных или классе, которые вы отправляете?   -  person Selim Yildiz    schedule 23.03.2020
comment
[DataContract] [Serializable] [ServiceKnownType(typeof(Session))] [ServiceKnownType(typeof(SqlConnection))] [ServiceKnownType(typeof(SqlParameter))] public class CompositeType { Session sValue ; [DataMember] public Session SessionValue { get {return sValue; } set {sValue = value; } } } Это DataContract, который я использовал. Я также использую метод, который отправляет этот класс в качестве параметра `void GetDataUsingDataContract(CompositeType Composite); `   -  person Nouha    schedule 23.03.2020
comment
Добавьте к своему вопросу, пожалуйста. И вы храните что-то с подключением к базе данных в сеансе?   -  person Selim Yildiz    schedule 23.03.2020
comment
Моя цель - создать сеанс из интерфейса devexpress xpo, а затем отправить его в службу wcf, чтобы заполнить его информацией из базы данных.   -  person Nouha    schedule 23.03.2020
comment
В XPO уже есть встроенный механизм передачи данных через сервисы WCF. Можете ли вы объяснить, почему это не подходит для вас? См.: Передача данных через службы WCF   -  person Brendon    schedule 23.03.2020


Ответы (1)


Объекты XPO привязаны к хранилищу данных через сеанс, и вы не можете отправить их по сети.

Если вы хотите просто передавать необработанные данные между компьютерами, используйте объект передачи данных. XPO извлекает данные из базы данных с одной стороны, а вы извлекаете данные с другой стороны, используя методы клиента WCF.

XPO также поддерживает более сложный сценарий. Если вы хотите использовать XPO на стороне клиента, но не можете создать прямое подключение к базе данных из соображений безопасности, вы можете реализовать IDataStore в качестве контракта на стороне WCF.

Интерфейс IDataStore легко реализовать, потому что все, что вам нужно, это обернуть существующую Адаптер хранилища данных. Все адаптеры хранилища данных реализуют интерфейс IDataStore. уровень доступа к данным XPO может использовать любой IDataStore в качестве источника данных. В этом блоге объясняется этот подход: XPO хорош для распределенных приложений.

Кроме того, XPO имеет встроенную службу WCF и клиентские компоненты, которые уже реализуют интерфейс IDataStore. Все, что вам нужно, это собрать их вместе. См. примеры здесь: Передача данных через службы WCF.

person Uranus    schedule 24.03.2020
comment
Большое спасибо за ответ. очень полезно понять передачу данных devexpress. Я нашел пример, который должен быть полезен [community.devexpress.com/blogs/xpo/archive/2011/05/17/ Но моя цель состоит в том, чтобы у меня был запрос-ответ WCF. Я думаю, что это невозможно с devexpress и wcf с передачей данных. Я реализую другое решение. Благодарность - person Nouha; 24.03.2020
comment
Уран, пожалуйста, посмотрите на этот stackoverflow.com/questions/66647272/ - person ; 21.03.2021