Silverlight対応のWCFサービスの取得専用プロパティをどのように構成しますか

StackOverflow https://stackoverflow.com/questions/403943

質問

エラーが発生した場所はわかりません(silverlight、wcf、その他から...)が、Silverlightから呼び出されるWCFサービスがあります。このメソッドは、セッターを持たないプロパティを持つクラスを返します。これによりエラーがスローされます。プロパティにセッターを追加しても、エラーは発生しません。

このエラーは、通常の不可解で役に立たないSilverlightエラーメッセージですが、...

[Serializable]  
[DataContract]  
public SomeClass {  
    DataMember]  
    public string PropertyA { get; set; }  
    public string PropertyB { get { return "Hi There"; } }  
}  

エラーをスローします...

ただし、次のように変更します:

[Serializable]  
[DataContract]  
public SomeClass {  
     [DataMember]  
     public string PropertyA { get; set; }  
     public string PropertyB { get { return "Hi There"; } set {} }  
}  

エラーなし。

通常のISomeService.svc&が含まれますSomeService.svcクラス、クライアントの非同期呼び出しなど、Silverlightで更新された参照など。

プロパティを取得するための正しい設定方法は何ですか(" DataMember"以外の属性は取得のみ、またはprivate-setプロパティを許可します)?

役に立ちましたか?

解決

例では、PropertyBはDataMember属性でマークされていません。つまり、WSDLで公開されず、シリアライザーによって無視されます。ただし、PropertyBをDataMemberでマークする場合、正しくシリアル化するにはセッター(プライベート、保護、またはパブリック)が必要です。そうしないと、例外が発生する可能性があります。読み取り専用のプロパティをネットワーク経由でシリアル化する方法は2つあります。

[DataContract]
public class SomeClass
{ 
    public SomeClass()
    {
        _propertyB = "Hi there";
    }

    [DataMember(Name="PropertyB")]
    private readonly string _propertyB;

    public string PropertyB
    {
        get { return _propertyB; }
    }
}

またはこれ:

[DataContract]
public class SomeClass
{ 
    public SomeClass()
    {
        PorpertyB = "Hi there";
    }

    [DataMember]
    public string PropertyB
    {
        get;
        private set;
    }
}

svcutil.exe を使用する場合、生成されたプロキシクラスには、プロパティのパブリックゲッターとセッターの両方がありますが、これは探しているものではない可能性があります。この場合、クライアント側でサービスコントラクトとデータコントラクトアセンブリを使用できます。

他のヒント

ありがとう。プライベートセットで十分なようです。必要のないときにsetメソッドを使用するのは好きではありませんが、アクセスするとエラーがスローされる可能性があります。

[DataMember]  
public PropertyB {  
    get {  
         return "Hi there";  
    }  
    private set {  
         throw new Exception("Empty setter for use by WCF Service.");
    }  
}      

または何でも。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top