团队会话的Webhook订阅不使用WCF中继
有人能帮我解决这个问题吗。我无法从出错的地方进行调试。基本上,我已经在Azure中使用WCF中继创建了一个WCF Rest API Web服务,以便在本地和Azure之间建立混合连接。另外,如果我忽略任何证书验证,该端点是用于内部部署的,因为它是自签名证书,但在进行API调用时,我在Azure中发布时使用WCF中继提供的base64编码公钥 WCF合同和实施: 我能够成功地在WCF服务中获得“validationToken”,并且在5秒以下立即返回相同的validationToken。返回后,显示此消息时总是出错 编辑 WCF合同 WCF实施: 返回200 OK状态代码的第一种方法: 返回200状态代码的第二种方法:团队会话的Webhook订阅不使用WCF中继,wcf,microsoft-graph-api,microsoft-graph-webhooks,Wcf,Microsoft Graph Api,Microsoft Graph Webhooks,有人能帮我解决这个问题吗。我无法从出错的地方进行调试。基本上,我已经在Azure中使用WCF中继创建了一个WCF Rest API Web服务,以便在本地和Azure之间建立混合连接。另外,如果我忽略任何证书验证,该端点是用于内部部署的,因为它是自签名证书,但在进行API调用时,我在Azure中发布时使用WCF中继提供的base64编码公钥 WCF合同和实施: 我能够成功地在WCF服务中获得“validationToken”,并且在5秒以下立即返回相同的validationToken。返回后
公共WebFaultException webhookForConservation(WebhookPayload数据,字符串validationToken=“”)
{
ServicePointManager.ServerCertificateValidationCallback=(发件人、证书、链、sslPolicyErrors)=>true;
var client=新的HttpClient();
client.DefaultRequestHeaders.Add(“接受”、“文本/普通”);
client.DefaultRequestHeaders.TryAddWithoutValidation(“内容类型”、“应用程序/json”);
HttpResponseMessage响应=null;
if(validationToken!=null&&validationToken!=“”)
{
响应=客户端。PostAsync(“http://localhost:8080/conversationWebHook/conversationSubscription?validationToken=“+validationToken,空)。结果;
var apiContent=response.Content.ReadAsStringAsync().Result;
返回新的WebFaultException(apicContent,HttpStatusCode.OK);
}
其他的
{
StringContent strContent=新的StringContent(DataContractJsonSerializerHelper.SerializeJson(数据));
strContent.Headers.ContentType=MediaTypeHeaderValue.Parse(“应用程序/json”);
响应=客户端。PostAsync(“http://localhost:8080/conversationWebHook/conversationSubscription“,strContent)。结果;
}
var result=(response!=null)?response.Content.ReadAsStringAsync()。结果:“”;
返回新的WebFaultException(结果,HttpStatusCode.OK);
}
从WCF服务返回200 OK响应代码后出现的相同错误
直接与邮递员调用中继WCF API:
标题:
提前感谢您提供的所有帮助。有两个问题妨碍WCF继电器正常工作:
- 中继未将响应内容类型设置为text/plain,这已通过
ctx.OutgoingResponse.ContentType=“text/plain”
- 中继正在向所需的响应体添加一个XML包装器,这是通过将返回值更改为Stream来解决的
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "webhookForConservation?validationToken={validationToken}",
BodyStyle = WebMessageBodyStyle.Bare)]
string webhookForConservation(WebhookPayload data, string validationToken);
public string webhookForConservation(WebhookPayload data, string validationToken = "")
{
ServicePointManager.ServerCertificateValidationCallback = (sender, cert, chain, sslPolicyErrors) => true;
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Accept", "text/plain");
client.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/json");
HttpResponseMessage response = null;
WebOperationContext ctx = WebOperationContext.Current;
if (validationToken != null && validationToken != "")
{
response = client.PostAsync("http://localhost:8080/conversationWebHook/conversationSubscription?validationToken=" + validationToken, null).Result;
var apiContent = response.Content.ReadAsStringAsync().Result;
ctx.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;
ctx.OutgoingResponse.ContentType = "text/plain";
return apiContent;
}
else
{
StringContent strContent = new StringContent(DataContractJsonSerializerHelper.SerializeJson(data));
strContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
response = client.PostAsync("http://localhost:8080/conversationWebHook/conversationSubscription", strContent).Result;
}
var result = (response != null) ? response.Content.ReadAsStringAsync().Result : "";
ctx.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;
return result;
}
public WebFaultException<string> webhookForConservation(WebhookPayload data, string validationToken="")
{
ServicePointManager.ServerCertificateValidationCallback = (sender, cert, chain, sslPolicyErrors) => true;
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Accept", "text/plain");
client.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/json");
HttpResponseMessage response = null;
if (validationToken != null && validationToken != "")
{
response = client.PostAsync("http://localhost:8080/conversationWebHook/conversationSubscription?validationToken=" + validationToken, null).Result;
var apiContent = response.Content.ReadAsStringAsync().Result;
return new WebFaultException<string>(apiContent, HttpStatusCode.OK);
}
else
{
StringContent strContent = new StringContent(DataContractJsonSerializerHelper.SerializeJson(data));
strContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
response = client.PostAsync("http://localhost:8080/conversationWebHook/conversationSubscription", strContent).Result;
}
var result = (response != null) ? response.Content.ReadAsStringAsync().Result : "";
return new WebFaultException<string>(result, HttpStatusCode.OK); ;
}