Где искать: WCF Rest - конечная точка POST не найдена

Я копался в этом почти два дня, что говорит о том, что это будет очень просто:

У меня есть служба WCF REST. GET отлично работает для возврата JSON, однако в POST я получаю только конечную точку, не найденную в Chrome, а также в Fiddler.

Я предоставлю свойства GET и POST на случай, если что-то сделаю, чтобы сломать их через методы GET.

<services>
      <service name="WCFServiceWebRole1.Class" behaviorConfiguration="serviceBehavior">
        <endpoint address=""
                  binding="webHttpBinding"
                  contract="WCFServiceWebRole1.IClass"
                  behaviorConfiguration="web">
        </endpoint>
      </service>
      <service name="WCFServiceWebRole1.ClassPost" behaviorConfiguration="serviceBehavior">
        <endpoint address=""
                  binding="wsHttpBinding"
                  contract="WCFServiceWebRole1.IClassPost"
                  behaviorConfiguration="web">
        </endpoint>
      </service>
    </services>

Одна вещь выделяется для меня, и это то, что не установлено для GET. Изменяя его, я нарушаю GET для решения, однако, удаляя его из POST, это не меняет ситуацию.

Мой сервисный контракт тогда выглядит так:

[ServiceContract]
public interface IClass
{
[WebInvoke(ResponseFormat = WebMessageFormat.Json, 
    BodyStyle = WebMessageBodyStyle.Bare,
    UriTemplate = "/GET/?json={jsonString}", Method = "GET")]
string Decode(string jsonString);


// TODO: Add your service operations here
}


[ServiceContract]
public interface IClassPost
{
[WebInvoke(ResponseFormat = WebMessageFormat.Json, 
    BodyStyle = WebMessageBodyStyle.Bare,
    UriTemplate = "/POST/?json={jsonString}", Method = "POST")] 
string DecodePost(string jsonString);
}

Наконец, у меня есть два идентичных класса в одном файле:

public class ClassPost : IClassPost
    {
        public string DecodePost(string queryString)
        {
            string Deserialized = JsonCleaner.CleanAllWhiteSpace(JsonConvert.DeserializeObject(queryString).ToString());
            return Deserialized;
        }

Класс для Decode на GET идентичен, метод и класс идентичны.

Как я могу получить больше информации о том, почему это не удается, или что я сделал не так? (И до сих пор ни одна из проблем с переполнением стека или иным образом не имела такой же проблемы / разрешения).

1 ответ

Решение

Это оказалось проблемой с моим контрактом на обслуживание.

Меняя его на отдельные ServiceContracts.

Перемещение всех OperationContracts внутри одного контракта на обслуживание исправило проблему, поэтому она выглядит так:

[ServiceContract]
public interface IClass
{
[WebInvoke(ResponseFormat = WebMessageFormat.Json, 
    BodyStyle = WebMessageBodyStyle.Bare,
    UriTemplate = "/GET/?json={jsonString}", Method = "GET")]
    string Decode(string jsonString);


[WebInvoke(ResponseFormat = WebMessageFormat.Json, 
   BodyStyle = WebMessageBodyStyle.Bare,
   UriTemplate = "/POST/?json={jsonString}", Method = "POST")] 
   string DecodePost(string jsonString);
}
Другие вопросы по тегам