Где искать: 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);
}