WCF RESTFUL Facebook Webhook没有收到POST

时间:2018-12-03 04:27:14

标签: c# facebook wcf-rest facebook-webhooks

我正在将基于.NET ASPX的旧版Facebook Webhook转换为WCF REST服务。我已经基本上可以正常工作了,除了我的订阅事件触发时似乎无法从Facebook收到任何POST。

作为参考,这是我从服务界面开始设置的一些代码

[ServiceContract]
public interface IWebhooksService
{
    [OperationContract]
    [WebInvoke(BodyStyle = WebMessageBodyStyle.Bare, Method = "*", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "Event")]
    Stream Event(Stream postData);
}

在“流事件(流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)”中,我使用流读取器读取流,然后记录接收到的JSON字符串。我现在正在记录它,以查看我从Facebook接收到哪种JSON对象。

上面的代码有效,我什至使用Facebook's POST example与Postman和Fiddler进行了测试

但是,当我在服务器上运行它并使用Facebook的测试事件时,什么也没发生。我什至包括了跟踪日志,以查看是否调用了我的方法。我发现,当我应该从Facebook收到POST请求时,根本没有调用“事件”方法。

但是我确实注意到,当我删除“ Stream postData”参数时,它将突然起作用。但是当我这样做时,我的问题就变成了,如何获取POST正文或从Event方法中而不是通过Stream参数访问流?

TL:DR;

  • 当Facebook向我的服务发送POST时,如何调用Stream参数为“ postData”的“ Event”方法?

OR

  • 如果无法通过Stream参数从请求流中获取JSON数据,我该如何从Event方法中获取它?

0 个答案:

没有答案