Я хочу прочитать текст HttpRequest, полученный веб-службой WCF.

Веб-сервис WCF выглядит так:

[ServiceContract]
public interface ITestRestService
{
    [OperationContract]
    [WebInvoke(Method = "POST",
        ResponseFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.Bare,
        UriTemplate = "/test")]
    string Test(Stream aStrm);
}

Клиент, который отправляет эту службу, успешно вызывает метод Test(), но aStrm выдает исключение:

'aStrm.ReadTimeout' threw an exception of type 'System.InvalidOperationException'

Должен ли я использовать поток для отправки тела или чего-то еще?

Я могу отправить данные как часть URL-адреса, если конфигурации для этого контракта выглядят так:

    [WebInvoke(Method = "POST",
        ResponseFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.Bare,
        UriTemplate = "?s={aStr}")]
    string Test(string aStr);

Но это обычная практика? не следует ли мне логически добавлять содержимое в тело запроса вместо URL-адреса?

Я прочитал подобное questions, но я все еще не уверен.

0
Serge P 20 Авг 2014 в 06:49

1 ответ

Лучший ответ

Я согласен с вами, что тело запроса POST - лучшее место для отправки данных. Хотя некоторые веб-службы вместо этого отправляют данные через URL-адрес. Помимо семантики, существуют проблемы безопасности, если конфиденциальные данные отправляются, поскольку URL-адреса могут отображаться в административных журналах в виде обычного текста и т. Д.

Если вам действительно не нужен Stream для больших объемов данных, вы можете создать класс модели для переноса данных. Более ранние версии веб-API ASP.NET (преемника веб-API WCF) требовали от вас использования полный класс для тела POST.

Я бы попробовал что-то вроде

public class PostData
{
    public string aStr { get; set; }
}

[WebInvoke(Method = "POST",
 ResponseFormat = WebMessageFormat.Json,
 BodyStyle = WebMessageBodyStyle.Bare,
 UriTemplate = "?s={aStr}")]
    string Test(PostData data);

Вот ссылка, которую вы можете использовать для публикации с помощью WCF. Он демонстрирует отправку данных JSON с помощью модели. http://blog.alexonasp.net/post/2011/05/03/REST-using-the-WCF-Web-API-e28093-POST-it!.aspx

1
Despertar 20 Авг 2014 в 07:20