クライアント上の共有オブジェクトと派生クラスを備えたWCF
-
28-09-2019 - |
質問
私はWCFサービスを持っており、共有アセンブリのクライアントとタイプを共有しています。クライアントが派生クラスを作成した場合、派生したタイプをサービスに渡すことができます。
私は試しましたが、既知のタイプに問題があります。サービスは、派生したタイプを復活させる方法がわからないためです。
[Serializable]
public abstract class Car : ICar
{........
//クライアントについて:
[Serializable]
public class MyCar : Car
{......
MyCarをサービスに渡すとき、私は既知のタイプについて不平を言っている例外を取得しますが、クライアントが何を送信するかわからないので、サーバーにこれを追加することはできません。
実行時にクライアントタイプを既知のタイプとして登録することは可能ですか?
これは多分解決策ですか?http://blogs.msdn.com/b/sowmy/archive/2006/03/26/561188.aspx
解決
これは不可能です。サービスとクライアントの両方が、メッセージで送信されるタイプを知る必要があります。既知のタイプを使用する場合は、その関係をサービス上の親タイプと定義する必要があります。
サーバーに追加されたプロパティを知る必要があるのはなぜですか?
他のヒント
方法があると思います。
WCFを勉強したとき、クラスのシリアル化と一致しないすべてを得るためのメカニズムであるはずの拡張性Dataに会ったことを漠然と覚えています。たとえば、ExtensionDataを有効にし、この状況にある場合
//Server
public class GenericRQ
{
public string GenericProperty {get;set;}
}
public Service GenericService
{
Public void GenericMethod(GenericRQ RQ)
{
}
}
// client
Public class MoreSpecificRQ : GenericRQ
{
public string SpecificProperty {get;set;}
}
で
Public void GenericMethod(GenericRQ RQ)
{
// the serializer adds automatically in RQ.ExtensionData everything that has come and that does not match the class GenericRQ.
}
ExtensionDataを有効にする方法については、Webで簡単に検索できます
所属していません StackOverflow