RIA方法没有出现在Silverlight中

时间:2010-10-28 02:35:18

标签: silverlight silverlight-4.0 wcf-ria-services

我有一些带有几种方法的DomainService。

一个有返回类型的字符串,没有参数:

public string MyMethod1() { }

我可以从Silverlight中调用这个。

一个返回类型为void,一个参数是一个域对象(我使用的是LinqToSqlDomainService,这个对象是DataContext的一部分):

public void MyMethod2(MyDomainObject object) { }

我也可以从Silverlight中调用它。

另一个具有返回类型的字符串和一个域对象的参数:

public string MyMethod3(MyDomainObject object) { }

无法从Silverlight 调用此方法,因为该方法未在代理上生成。

为什么没有生成,我该怎么办呢?

1 个答案:

答案 0 :(得分:2)

尝试将[Invoke]属性添加到操作中。

我创建了一个使用以下合同定义的示例应用程序,并且我能够在Silverlight应用程序中生成所有三种方法。

这是DBML文件。 LINQ to SQL DBML file

这是定义的服务。

[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)));
}