WCF RESTFUL Facebook Webhook не получает POST - PullRequest
0 голосов
/ 03 декабря 2018

Я конвертирую старую версию .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 Event (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, ничего не происходит.Я даже включил журналы трассировки, чтобы увидеть, были ли вызваны мои методы.Я обнаружил, что метод «Событие» вообще не вызывался всякий раз, когда мне приходилось получать запрос POST от Facebook.

Однако я заметил, что при удалении параметра «Stream postData» он будетвдруг работа.Но когда я делаю это, моя проблема становится: как получить тело POST или получить доступ к потоку из метода Event, а не через параметр Stream?

TL: DR;

  • Как мне вызвать метод «Event» с параметром Stream «postData», который будет вызываться, когда Facebook отправляет POST на мой сервис?

ИЛИ

  • Если я не могу получить данные JSON из потока запросов через параметр Stream, как мне получить их из метода Event?
...