我正在将基于.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;
OR