Как вызвать WCF REST / JSON Service из клиентского приложения - PullRequest
1 голос
/ 13 октября 2011

У меня есть WCF REST / JSON Service, я создаю его, используя этот шаблон. В моем сервисе у меня есть метод

 [WebInvoke(UriTemplate = "Create", Method = "*",RequestFormat = WebMessageFormat.Json,BodyStyle = WebMessageBodyStyle.Bare)]
    public void Create(PictureData pictureData)
    {
        var context = new EFDBContext();
        context.PictureData.Add(pictureData);
        context.SaveChanges();
    }

PictureData это мои данные сущности, которые я пытаюсь сохранить в БД через EF.

В моем клиентском приложении WPF я пытаюсь вызвать этот метод:

using (var client = new HttpClient("http://localhost:8080/ScreenPictureService/Create"))
        {
            var dataContract = HttpContentExtensions.CreateJsonDataContract(pictureData);
            client.Post("", dataContract);
        }

Но ничего не происходит

  • Я также пытаюсь использовать Method = "POST" в атрибуте WebInvoke
  • Также я пытаюсь использовать адрес без «Создать» в HttpClient, а затем использовать его в client.Post в первом параметре

UPDATE

После того, как я попробую это

var dataContract = HttpContentExtensions.CreateJsonDataContract(pictureData, typeof (PictureData));
        var client = new HttpClient();
        using(var response = client.Post("http://localhost:8080/ScreenPictureService/Create", dataContract))
        {
            response.EnsureStatusIs(HttpStatusCode.OK);
        }

Я получил плохой запрос 400

ОБНОВЛЕНИЕ 2 Я нашел свои проблемы:

  • Я использую JSON.NET для сериализации моего объекта, и когда я получаю байтовый массив, он преобразуется в формат base64, но моя служба ожидает байтовый массив - решено использовать список байтов.

  • И вторая проблема - я пытаюсь получить скриншот моего desctop с высокой степенью защиты, и у меня тот же ответ (Bad Request 400), если я изменяю разрешение изображения на 800x600, сервис работает хорошо, и мой вопрос - Как увеличить квоту на запрос сообщения. Я пытаюсь использовать внутри стандартного раздела Endpoint (web.config)

readerQuotas maxArrayLength = "2147483647" maxBytesPerRead = "2147483647" maxDepth = "2147483647" maxNameTableCharCount = "2147483647" maxStringContentLength = "2147483647"

Но это не работает

Ответы [ 3 ]

0 голосов
/ 14 октября 2011

Я предлагаю Гамак , это просто и хорошо работает.

0 голосов
/ 15 ноября 2011

Ошибка 400 Неправильный запрос может быть из-за многих возможностей.Попробуйте включить трассировку на вашем сервисе.Это можно сделать, перейдя по ссылке здесь .

. Также, если у вас есть файл конфигурации с конфигурацией, убедитесь, что у вас задан ридер Quotas, указанный ниже, если вы используете webHttpBinding:

<webHttpBinding>
    <binding name="RestBinding">
      <readerQuotas maxStringContentLength="5242880" maxArrayLength="16384"
        maxBytesPerRead="4096" />
      <security mode="None">
        <transport clientCredentialType="None" />
      </security>
    </binding>
  </webHttpBinding>

Если вы используете API REST для определения службы с маршрутами в global.asax и с использованием стандартной конечной точки, используйте следующее:

<standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true">
    <readerQuotas maxStringContentLength="5242880" maxArrayLength="4194304"
            maxBytesPerRead="4194304" />
</standardEndpoint>
0 голосов
/ 14 октября 2011

Вы пытались отслеживать точный запрос / ответ с помощью такого инструмента, как Fiddler?Возможно, ваше сообщение отличается от ожидаемого?

Знает ли служба WCF о приеме REST?Если вы не используете WCF.WebApi , то для настройки обычно используются ужасные привязки wcf, например:

<service name="MyWcfServiceWebRole.xyz.IAbcService">
    <endpoint address="" behaviorConfiguration="webby" binding="webHttpBinding" bindingConfiguration="RestBinding" contract="MyWcfServiceWebRole.xyz.IAbcService" />
</service>

<behaviors>
   <endpointBehaviors>
      <behavior name="webby">
         <webHttp />
      </behavior>
   </endpointBehaviors>
</behaviors>

Работает ли простой REST Get?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...