WCF RESTFUL Facebook Webhook не получает POST
Я конвертирую старый.NET ASPX на основе Facebook Webhook в службу WCF REST. Я получил это в основном работает, за исключением того, что я не могу получать какие-либо сообщения POST от Facebook всякий раз, когда мои подписанные события запускаются.
Для справки вот код, который я настроил, начиная с моего интерфейса сервиса
[ServiceContract]
public interface IWebhooksService
{
[OperationContract]
[WebInvoke(BodyStyle = WebMessageBodyStyle.Bare, Method = "*", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "Event")]
Stream Event(Stream postData);
}
Внутри метода "Потоковое событие (Stream postData)"
string method = WebOperationContext.Current.IncomingRequest.Method;
switch (method)
{
case "POST":
_log.Trace("**** PROCESS DATA START ****");
result = ReceiveFacebookEvent(postData);
_log.Trace("**** PROCESS DATA END ****");
break;
case "GET":
_log.Trace("**** SUBSCRIBE START ****");
result = SubscribeToFacebookEvents();
_log.Trace("**** SUBSCRIBE END ****");
break;
default:
_log.Error("Unknown Web Request Method: {0}", WebOperationContext.Current.IncomingRequest.Method);
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.BadRequest;
break;
}
Внутри метода "ReceiveFacebookEvent(Stream postData)" я использую Stream Reader, чтобы прочитать Stream и затем записать полученную строку JSON. Сейчас я регистрирую его, чтобы увидеть, какие объекты JSON я получаю от Facebook.
Приведенный выше код работает, и я даже проверил это с Почтальоном и Фидлером, используя пример POST в Facebook
Но когда я запускаю его на своем сервере и использую тестовые события Facebook, ничего не происходит. Я даже включил журналы трассировки, чтобы увидеть, были ли вызваны мои методы. Я обнаружил, что метод "Event" вообще не вызывался всякий раз, когда мне приходилось получать запрос POST от Facebook.
Однако я заметил, что когда я удалил параметр "Stream postData", он неожиданно заработал. Но когда я делаю это, моя проблема становится: как получить тело POST или получить доступ к потоку из метода Event, а не через параметр Stream?
TL: DR;
- Как я могу получить метод "Event" с параметром Stream "postData" для вызова, когда Facebook отправляет POST моему сервису?
ИЛИ ЖЕ
- Если я не могу получить данные JSON из потока запросов через параметр Stream, как мне получить их из метода Event?