Предоставление объекта неизвестного типа из службы WCF - PullRequest
0 голосов
/ 04 марта 2011
[OperationContract]
public object  GetDeserializedObject(int partyContactID)
{
   PartyContact partyContact = GetPartyContactById(partyContactID);
   ContactTermResultQueue resultQueue = GetContactTermResultQueueByID(partyContact.TemplateQueueID);
   byte[] contactDataSetArray = resultQueue.QueryResult;
   //Getting DataSet from the byte array
   BinaryFormatter binaryFormatter = new BinaryFormatter();
   Stream mStreamtoRead = new MemoryStream(contactDataSetArray);
   object o = binaryFormatter.Deserialize(mStreamtoRead);

   mStreamtoRead.Close();
   object returnData=null;
   if (o.GetType().IsArray)
   {
      object[] os = o as object[];
      var value = from vs in os where (int) (vs.GetType().GetProperty("PartyID").GetValue(vs, null)) == partyContact.PartyID select vs;
      if (value.Count() > 0)
      {
         returnData = value.First();
      }
    }
    return returnData;
 }

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

Пожалуйстадайте мне знать, как мне этого добиться?

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 04 марта 2011

Вы не можете вернуть object и ожидать, что это сработает. Причина в том, что за этим кодом движок WCF использует сериализацию. Когда клиент получает сообщение, он должен иметь возможность десериализовать его обратно до некоторого объекта, но для этого он должен знать, какой тип объекта он получил.

Если вы хотите отправить «неизвестные» данные, используйте XElement. Клиент получит только XML, и он будет нести ответственность за его обработку (анализ, десериализацию и т. Д.).

2 голосов
/ 04 марта 2011

Вы можете делать определенные вещи с «необработанным» типом данных Message - но на самом деле это не очень приятное программирование ...

Читайте об этом здесь:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...