Совсем нет такой возможности, как использование базовых общих объектов в WCF-сервисах.
Вот пример объявления типа WSDL:
<complexType name="TimePeriod">
<all>
<element name="StartTime" type="xsd:timeInstant"/>
<element name="EndTime" type="xsd:timeInstant"/>
</all>
</complexType>
Эта схема видна для клиентов, а затем .NET может понять, что он может использовать свой собственный объект и передать его. В .NET это будет similar to
[DataContract]
public class TimePeriod
{
[DataMember]
public DateTime StartTime {get;set;}
[DataMember]
public DateTime EndTime {get;set;}
}
Java может понять WSDL и использовать собственный класс и объекты; Python может это сделать, PHP может это сделать, надеюсь, что у вас есть идея SOA.
Теперь вы хотите отправить объект, который может быть чем угодно. Это невозможно сделать с контрактами.
Однако, если вы можете пообещать, что в вашем проекте используется только .NET, тогда есть решение.
Идея состоит в том, чтобы сериализовать объект .NET в двоичном формате и указать имя типа объекта. Затем на стороне клиента десериализуйте его. Конечно, вы не можете просто сделать это с отправкой объекта с .NET на, скажем, на Python.
1) Малый объект отправки в строчном формате XML
[Serializable]
public class Data
{
public string TypeName {get;set;} // typeof(string), typeof(int), etc.
public string Xml {get;set;} // serialized object via XmlSerializer
}
Затем после сериализации и приема объекта в клиенте может быть десериализован
Data objectData;// we got it from service
var serializer = new XmlSerializer(typeof(objectData.TypeName));
object result;
using (TextReader reader = new StringReader(objectData.Xml))
{
result = serializer.Deserialize(reader);
}
Также двоичная сериализация может использоваться вместо XML, то будет свойство byte [].
2) Второе решение будет использовать двоичный поток и имя типа записи в header of message, подход аналогичен первой точке.
Все зависит от ситуации, но я рекомендую его для больших файлов (> 1 МБ).
Вы могли бы указать код 'requestdVM'? –
Я читал [эту статью] [1] и говорит: вы не можете вернуть «объект», поскольку он не сериализуется с WCF. Если объекты будут перенаправлены на , тогда они должны быть обычными сериализованными объектами, которые украшены атрибутом [Serializable]. [1]: http://www.pcreview.co.uk/forums/returning-object-wcf-service-t3907849.html @HenkaProgrammer – MrMins
Это может помочь - http: // stackoverflow.com/questions/5204893/wcf-send-an-unknown-type-to-a-wcf-service – Jsinh