Может кто-нибудь, пожалуйста, помогите мне решить эту проблему. Я не могу отлаживать, где это идет не так. По сути, я создал WCF Rest API WebService с использованием WCF Relay в Azure, чтобы иметь гибридное соединение между локальной и Azure. Также, если я игнорирую какую-либо проверку сертификата, эта конечная точка предназначена для локального использования, поскольку это самозаверяющий сертификат, но при выполнении вызова API я использую закодированный base64 ключ publi c, предоставленный ретранслятором WCF при публикации его в * 1093. *.
Контракт и реализация WCF:
Интерфейс контракта
Реализация
Я успешно могу чтобы получить «validationToken» в сервисе WCF, а также возвращать тот же validationToken сразу же менее 5 секунд. После возврата всегда выдается сообщение об ошибке.
Почтовый клиент для отправки HTTP-запроса
Ответ об ошибке и подписка не создана
РЕДАКТИРОВАТЬ
Контракт WCF
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "webhookForConservation?validationToken={validationToken}",
BodyStyle = WebMessageBodyStyle.Bare)]
string webhookForConservation(WebhookPayload data, string validationToken);
Реализация WCF:
1-й подход к возвращению 200 Код состояния OK:
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;
}
2-й подход для возврата кода состояния 200:
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); ;
}
Такая же ошибка наблюдается после возврата кода ответа 200 OK из службы WCF
Вызов API-интерфейса WCF-реле напрямую с почтальоном:
Заголовки:
Заранее спасибо за всю помощь.