Сервисный метод “возврата WCF, не позволенный”

Вы можете использовать немного рефлекса для построения дерева выражений следующим образом (это метод расширения):

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

40
задан Fabian Steeg 13 February 2009 в 12:44
поделиться

4 ответа

Ваш браузер отправляет 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.
 }
59
ответ дан Ries 12 November 2019 в 11:51
поделиться

Основные внутренние типы (например, byte, int, string, и массивы) будут сериализированы автоматически WCF. Пользовательские классы, как Ваш UploadedFile, не будут.

Так, глупый вопрос (но я должен спросить его...): UploadedFile отмечен как [DataContract]? В противном случае необходимо будет удостовериться, что это, и что каждый из участников в классе, который Вы хотите отправить, отмечен с [DataMember].

В отличие от дистанционной работы, где маркировка класса с [XmlSerializable] позволила Вам сериализировать целый класс, не потрудившись отмечать участников, которых Вы хотели сериализированный, WCF нужны Вы для повышения каждого участника. (Я полагаю, что это изменяет в.NET 3,5 SP1...)

А, огромный ресурс для разработки WCF - то, что мы знаем в нашем магазине как "книгу рыбы": Programming WCF Services Juval Lowy. В отличие от некоторых из других книг WCF вокруг, которые являются немного сухими и академическими, этот проявляет практический подход к созданию сервисов WCF и на самом деле полезен. Полностью рекомендуемый.

4
ответ дан Jeremy McGee 12 November 2019 в 11:51
поделиться

Это кажется на использование неправильного адреса:

Для доступа к Сервису я вхожу http://localhost/project/myService.svc/FileUpload

Предположение, что Вы подразумеваете, что это - адрес, который Вы даете своему клиентскому коду тогда, я подозреваю, что это должно на самом деле быть:

http://localhost/project/myService.svc
1
ответ дан Ubiguchi 12 November 2019 в 11:51
поделиться

Если вы используете атрибут [WebInvoke(Method="GET")] на сервисном методе, убедитесь, что имя метода написано как "GET", а не как "Get" или "get", т.к. оно чувствительно к регистру! У меня была та же самая ошибка, и мне потребовался час, чтобы разобраться в ней.

72
ответ дан 27 November 2019 в 01:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: