Метод RIA не отображается в Silverlight - PullRequest
0 голосов
/ 28 октября 2010

У меня есть DomainService с несколькими методами.

Один имеет возвращаемый тип строки и не имеет параметра:

public string MyMethod1() { }

Я могу позвонить из Silverlight.

Один имеет тип возврата void и параметр, который является объектом домена (я использую LinqToSqlDomainService, и этот объект является частью DataContext):

public void MyMethod2(MyDomainObject object) { }

Я также могу назвать это из Silverlight.

Еще один имеет возвращаемый тип строки и параметр, который является объектом домена:

public string MyMethod3(MyDomainObject object) { }

Я не могу вызвать его из Silverlight , так как метод не генерируется на прокси.

Почему он не генерируется и что я могу с этим сделать?

1 Ответ

2 голосов
/ 28 октября 2010

Попробуйте добавить в операцию атрибут [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)));
}
...