Вы можете использовать немного рефлекса для построения дерева выражений следующим образом (это метод расширения):
public static IQueryable<TEntity> OrderBy<TEntity>(this IQueryable<TEntity> source, string orderByProperty,
bool desc)
{
string command = desc ? "OrderByDescending" : "OrderBy";
var type = typeof(TEntity);
var property = type.GetProperty(orderByProperty);
var parameter = Expression.Parameter(type, "p");
var propertyAccess = Expression.MakeMemberAccess(parameter, property);
var orderByExpression = Expression.Lambda(propertyAccess, parameter);
var resultExpression = Expression.Call(typeof(Queryable), command, new Type[] { type, property.PropertyType },
source.Expression, Expression.Quote(orderByExpression));
return source.Provider.CreateQuery<TEntity>(resultExpression);
}
orderByProperty
- это имя свойства, которое вы хотите заказать, и если передать true как параметр для desc
, будет сортироваться в порядке убывания; в противном случае будет сортироваться в порядке возрастания.
Теперь вы должны иметь возможность делать existingStudents.OrderBy("City",true);
или existingStudents.OrderBy("City",false);
Ваш браузер отправляет HTTP-запрос GET: Удостоверьтесь, что Вы сделали, чтобы WebGet приписал на операции в контракте:
[ServiceContract]
public interface IUploadService
{
[WebGet()]
[OperationContract]
string TestGetMethod(); // This method takes no arguments, returns a string. Perfect for testing quickly with a browser.
[OperationContract]
void UploadFile(UploadedFile file); // This probably involves an HTTP POST request. Not so easy for a quick browser test.
}
Основные внутренние типы (например, byte
, int
, string
, и массивы) будут сериализированы автоматически WCF. Пользовательские классы, как Ваш UploadedFile, не будут.
Так, глупый вопрос (но я должен спросить его...): UploadedFile отмечен как [DataContract]
? В противном случае необходимо будет удостовериться, что это, и что каждый из участников в классе, который Вы хотите отправить, отмечен с [DataMember].
В отличие от дистанционной работы, где маркировка класса с [XmlSerializable] позволила Вам сериализировать целый класс, не потрудившись отмечать участников, которых Вы хотели сериализированный, WCF нужны Вы для повышения каждого участника. (Я полагаю, что это изменяет в.NET 3,5 SP1...)
А, огромный ресурс для разработки WCF - то, что мы знаем в нашем магазине как "книгу рыбы": Programming WCF Services Juval Lowy. В отличие от некоторых из других книг WCF вокруг, которые являются немного сухими и академическими, этот проявляет практический подход к созданию сервисов WCF и на самом деле полезен. Полностью рекомендуемый.
Это кажется на использование неправильного адреса:
Для доступа к Сервису я вхожу http://localhost/project/myService.svc/FileUpload
Предположение, что Вы подразумеваете, что это - адрес, который Вы даете своему клиентскому коду тогда, я подозреваю, что это должно на самом деле быть:
http://localhost/project/myService.svc
Если вы используете атрибут [WebInvoke(Method="GET")]
на сервисном методе, убедитесь, что имя метода написано как "GET", а не как "Get" или "get", т.к. оно чувствительно к регистру! У меня была та же самая ошибка, и мне потребовался час, чтобы разобраться в ней.