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?

0 ответов

Другие вопросы по тегам