Я использую объект Stream
внутри своих контрактов wcf, поэтому вынужден использовать MessageContract
вместо DataContract
.
[MessageContract]
public class Document
{
[MessageBodyMember(Order = 1)]
public System.IO.Stream FileData;
}
[MessageContract]
public class A : Document
{
[MessageBodyMember]
public string input;
}
[MessageContract]
public class B : Document
{
[MessageBodyMember]
public string someProp;
}
[ServiceContract]
public interface ISomeService
{
[OperationContract]
Document SomeMethod(Document file);
}
Я хочу, чтобы потребитель этой службы создал объект A или B и вызвал службу с ним. На стороне службы я могу ввести приведение к нужному объекту, а затем выполнить какое-то действие.
Проблема в том, что я не могу указать KnownType
с MessageContract
, а унаследованные контракты не могут быть представлены клиенту до тех пор, пока они не будут использоваться в службе или объявлены с KnownType
.
Я пробовал погуглить, но не нашел ничего, связанного с KnownType
с MessageContract
.
Как было предложено в комментарии ... я обновил свой контракт сообщения с KnownType
, но они все еще не доступны клиенту через ссылку на службу ...
[MessageContract]
[KnownType(typeof(FileSystemStoredDocument))]
[KnownType(typeof(FileBoundStoredDocument))]
[KnownType(typeof(SharepointStoredDocument))]
public class Document : DocumentInfo, IDisposable
{
}
Кто-нибудь может мне помочь, что здесь не так?
Примечание: ВСЕ KnownType
унаследованы от Document
KnownType
наMessageContract
. Но я считаю, что помню, потоки не сериализуемы, что означает, что вы не сможете их передавать. Также ознакомьтесь с этим - person lokusking   schedule 16.07.2016DocumentInfo
как известного типа? - person lokusking   schedule 19.07.2016