调用或命名更新
本文关键字:更新 调用 | 更新日期: 2023-09-27 18:05:23
我使用Silverlight与WCF RIA服务。我的实体模型中有一个类叫做Activation
。它具有Code1
和Code2
的性质以及其他性质。
在我的silverlight客户端上,我需要发送一个Activation
到服务器,它从与之关联的对象中挑选出值,并填充Code1
和Code1
属性。例句:
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