我有一些带有几种方法的DomainService。
一个有返回类型的字符串,没有参数:
public string MyMethod1() { }
我可以从Silverlight中调用这个。
一个返回类型为void,一个参数是一个域对象(我使用的是LinqToSqlDomainService,这个对象是DataContext的一部分):
public void MyMethod2(MyDomainObject object) { }
我也可以从Silverlight中调用它。
另一个具有返回类型的字符串和一个域对象的参数:
public string MyMethod3(MyDomainObject object) { }
我无法从Silverlight 调用此方法,因为该方法未在代理上生成。
为什么没有生成,我该怎么办呢?
答案 0 :(得分:2)
尝试将[Invoke]
属性添加到操作中。
我创建了一个使用以下合同定义的示例应用程序,并且我能够在Silverlight应用程序中生成所有三种方法。
这是DBML文件。
这是定义的服务。
[EnableClientAccess()]
public class DomainService1 : LinqToSqlDomainService<DataClasses1DataContext>
{
public Player GetPlayer()
{
throw new NotImplementedException();
}
public void MyMethod(Player player)
{
}
[Invoke]
public string MyMethod2(Player player)
{
return String.Empty;
}
}
这是Silverlight项目中生成的代码:
/// <summary>
/// Gets an EntityQuery instance that can be used to load <see cref="Player"/> entities using the 'GetPlayer' query.
/// </summary>
/// <returns>An EntityQuery that can be loaded to retrieve <see cref="Player"/> entities.</returns>
public EntityQuery<Player> GetPlayerQuery()
{
this.ValidateMethod("GetPlayerQuery", null);
return base.CreateQuery<Player>("GetPlayer", null, false, false);
}
/// <summary>
/// Invokes the 'MyMethod' method of the specified <see cref="Player"/> entity.
/// </summary>
/// <param name="player">The <see cref="Player"/> entity instance.</param>
public void MyMethod(Player player)
{
player.MyMethod();
}
/// <summary>
/// Asynchronously invokes the 'MyMethod2' method of the domain service.
/// </summary>
/// <param name="player">The value for the 'player' parameter of this action.</param>
/// <param name="callback">Callback to invoke when the operation completes.</param>
/// <param name="userState">Value to pass to the callback. It can be <c>null</c>.</param>
/// <returns>An operation instance that can be used to manage the asynchronous request.</returns>
public InvokeOperation<string> MyMethod2(Player player, Action<InvokeOperation<string>> callback, object userState)
{
Dictionary<string, object> parameters = new Dictionary<string, object>();
parameters.Add("player", player);
this.ValidateMethod("MyMethod2", parameters);
return ((InvokeOperation<string>)(this.InvokeOperation("MyMethod2", typeof(string), parameters, true, callback, userState)));
}
/// <summary>
/// Asynchronously invokes the 'MyMethod2' method of the domain service.
/// </summary>
/// <param name="player">The value for the 'player' parameter of this action.</param>
/// <returns>An operation instance that can be used to manage the asynchronous request.</returns>
public InvokeOperation<string> MyMethod2(Player player)
{
Dictionary<string, object> parameters = new Dictionary<string, object>();
parameters.Add("player", player);
this.ValidateMethod("MyMethod2", parameters);
return ((InvokeOperation<string>)(this.InvokeOperation("MyMethod2", typeof(string), parameters, true, null, null)));
}