Я хочу прочитать текст 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, но я все еще не уверен.
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
Похожие вопросы
Связанные вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.