Отправить dev Express Session как параметр в сервисе wcf - PullRequest
0 голосов
/ 23 марта 2020

У меня есть исключение, когда я хочу отправить сеанс dev Express составного типа в 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); 

1 Ответ

2 голосов
/ 24 марта 2020

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

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

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

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

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

...