Могу ли я проверить? Вы передаете делегат веб-службе? Это не сработает ... его нельзя сериализовать. В лучшем случае ADO.NET Data Services (.NET 3.5SP1) может сделать нечто подобное, переведя Expression
в строку запроса ... но это настолько близко, насколько вы получите. Кроме того, вам придется создать объект запроса, который инкапсулирует ваше намерение с обычными свойствами.
Это относится к любому из веб-сервисов, сервисов wcf, tcp и т. Д.
* = делегат по сути является дескриптором безопасного типа (с необязательной ссылкой target (instance)); это может быть выражено, например, как xml
(редактировать)
Из комментариев - возможно, вы просто не приписали свои контракты с данными; это означает, что он должен вывести контракт (и часто ошибается). Например:
[DataContract]
class Foo : IWhateverInterfaces {
[DataMember]
public string Bar {get;set;}
[DataMember]
public int Baz {get;set;}
public float NotPartOfTheContract {get;set;}
public event EventHandler AlsoNotPartOfTheContract;
}
При использовании [DataContract]
только члены, отмеченные [DataMember]
, сериализуются, поэтому событие следует игнорировать. Раньше это был только способ выполнения контрактов данных WCF, но MS подправила его, чтобы вывести контракты из полей ... ошибка IMO, так как это вызывает проблему, которую вы только что имели ...