Проблема с сервисом REST в .NET - PullRequest
1 голос
/ 30 марта 2011

Я пытаюсь создать службу REST через wcf и успешно реализовал функции, которые вызываются через [WebInvoke(Method = "GET")]

Теперь я хочу создать функцию обновления, которая использует Method="POST". Это не работает с 405: метод не разрешен. Я подозреваю, что мне нужно что-то настроить в моем файле web.config.

Эта ошибка возникает при запуске службы wcf в отладчике VS2010.

Это определение услуги:

[OperationContract]
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Bare,
    UriTemplate = "object/{id}?status={status}&reason={reason}")]
Textblock SetObjectStatus(string id, string status, string reason);

Когда я вызываю этот метод через HttpWebRequest req с Method = "POST", я получаю ошибку 405: метод не разрешен.

Мой web.config выглядит так:

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <services>
      <service behaviorConfiguration="ServiceBehaviour" name="WcfService1.TextblockService">
        <endpoint address="" behaviorConfiguration="web" binding="webHttpBinding" contract="WcfService1.ITextblockService" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ServiceBehaviour">
          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="web">
          <webHttp/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
</configuration>

Ответы [ 2 ]

0 голосов
/ 30 марта 2011

Я нашел причину проблемы. Я получил доступ к почте через неправильный URL. Я использовал ../object, вместо ../object/1.

Что странно, так это то, что когда вы делаете POST, вы не получаете ошибку endpoint not found, которая появляется при выполнении GET, но вы получаете ошибку method not allowed.

0 голосов
/ 30 марта 2011

Я думаю, что проблема в том, что вы можете отправить только один элемент данных в данных поста, но вы отправляете 2 (состояние и причина).

В качестве теста вы можете удалить один из параметров и попробовать отправить только один элемент.Это как минимум подтвердит проблему и удалит ваш web.config из возможных проблем.

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