Stream
オブジェクトを私のwcfコントラクト内に使用していますので、DataContract
の代わりにMessageContract
を使用するように強制しました。WCFのMessageContractのKnownType
[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
と宣言されるまで、クライアントに公開することはできません。
私はgoogleを試みましたが、KnownType
に関連するものはMessageContract
で見つかりませんでした。
コメントで示唆したように...私はKnownType
と私のメッセージコントラクトを更新したが、彼らはまだサービス参照を介してクライアントに公開されていません...
[MessageContract]
[KnownType(typeof(FileSystemStoredDocument))]
[KnownType(typeof(FileBoundStoredDocument))]
[KnownType(typeof(SharepointStoredDocument))]
public class Document : DocumentInfo, IDisposable
{
}
は、いずれもここで間違っているものを私を助けることができますか?
注:ALL KnownType
がDocument
私が言っていることは間違っているようです。 AFAIKでは 'MessageContract'で' KnownType'を使うことができます。しかし、私はストリームがシリアライズ可能ではないことを覚えていると信じています。あなたがそれらを転送できないことを意味します。また、[this](http://stackoverflow.com/questions/3208866/wcf-message-contract-and-streaming)を見てください – lokusking
あなたは例外を投稿できますか?また、既知の型として 'DocumentInfo'をマークしましたか? – lokusking
例外はありません。プロキシ生成コードで派生型を簡単に見ることはできません。およびドキュメント情報は、すでにサービス契約のメソッドの1つに含まれているため、knownTypeとしては記述されていません。 – Abhash786