调用或命名更新

本文关键字:更新 调用 | 更新日期: 2023-09-27 18:05:23

我使用Silverlight与WCF RIA服务。我的实体模型中有一个类叫做Activation。它具有Code1Code2的性质以及其他性质。

在我的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服务实现这一目标的最佳方法是什么?起初,我认为域名服务中的命名更新可能会完成这项工作,但似乎没有Async回调。

任何想法都将非常感激!

调用或命名更新

这正是InvokeAttribute的意思,只是把它放在你的"ServerMethod"上。
关于Async, wcf ria服务中的每个调用都是异步的,如果你想要得到通知,你必须提供一个回调方法。编辑:我没有看到你的问题,你需要传递"关联"属性沿线。在这种情况下,nameduupdate(尽管语义不正确)可能更容易。只要记住你的上下文必须"干净",否则你会向服务器提交意想不到的更改(记住你必须调用DomainContext上的SubmitChanges)。
如果你更喜欢使用InvokeAttribute,(这是我要走的方式)那么,是的,正如你指出的,将"更新"的实体返回给客户端,并解决关联的问题,自己使用序列化,即,序列化你的实体并将其发送到服务器,而不是反序列化服务器端并在返回给客户端之前再次序列化它,在那里你将最终反序列化它。
我附加了一段代码,我使用服务器端和客户端,我使用这个目的。

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