0

WCF RIA サービスで Silverlight を使用しています。私のエンティティモデルには というクラスがありActivationます。プロパティがあります:Code1およびCode2その他のプロパティがあります。

Silverlight クライアントではActivation、サーバーに を送信して、関連付けられたオブジェクトから値を取得し、属性Code1Code1属性を設定する必要があります。例えば:

Public Sub ServerMethod(ByRef myActivation as Activation)
    Dim x as Integer = myActivation.Licence.NumberOfDays
    Dim y as Integer = myActivation.Product.ProductSeed
    myActivation.Code1 = GetCode1(x,y)
    myActivation.Code2 = GetCode2(x,y)
End Sub

アクティベーション コードはデータベースに永続化されないことに注意してください。ユーザーが必要に応じて保存することを決定できるクライアントに戻るだけです。

WCF RIA サービスを使用してこれを達成する最善の方法は何ですか? 最初は、ドメイン サービスの名前付き更新プログラムが機能する可能性があると考えていましたが、そのための非同期コールバックはないようです。

どんなアイデアでも大歓迎です!

4

1 に答える 1

0

これはまさにInvokeAttributeの目的であり、「ServerMethod」に配置するだけです。
Async については、wcf ria サービスのすべての呼び出しが非同期であり、通知を受け取りたい場合はメソッドにコールバックを提供する必要があります。
編集: あなたの質問では、ワイヤーに沿って「関連付け」プロパティを渡す必要があるとは思いませんでした。その場合、NamedUpdate は、意味的には正しくありませんが、より簡単になる可能性があります。コンテキストが「クリーン」である必要があることを覚えておいてください。そうしないと、意図しない変更をサーバーに送信することになります (DomainContext で SubmitChanges を呼び出す必要があることに注意してください)。
InvokeAttribute を使用する場合 (これが私のやり方です)、はい、指摘したように、「更新された」エンティティをクライアントに返し、関連付けの問題を回避するには、Serialization を使用します。つまり、エンティティをシリアライズしてサーバーに送信するよりも、サーバー側でデシリアライズして再度シリアライズしてからクライアントに返し、そこで最終的にデシリアライズします。
この目的で使用するサーバー側とクライアント側の両方で使用するコードを添付します。

public static class Serialization
{
    public static string Serialize<T>(T obj)
    {
        //Create a stream to serialize the object to.
        var ms = new MemoryStream();

        // Serializer the User object to the stream.
        var ser = new DataContractSerializer(typeof (T));


        ser.WriteObject(ms, obj);
        byte[] array = ms.ToArray();
        ms.Close();
        return Encoding.UTF8.GetString(array, 0, array.Length);
    }

    public static T Deserialize<T>(string obj) where T : class
    {
        if (obj == null)
            return null;
        var serializer = new DataContractSerializer(typeof (T));
        var stream = new MemoryStream(Encoding.UTF8.GetBytes(obj));
        var result = serializer.ReadObject(stream) as T;
        return result;
    }
}

HTH

于 2013-03-25T11:58:48.663 に答える