Отладка логических приложений Azure: вызов внешнего API - PullRequest
0 голосов
/ 29 января 2019

Поэтому я пытаюсь, чтобы приложения Azure Logic просматривали мою электронную почту и затем вызывали веб-службу, которую я настроил на основе определенных критериев.Я успешно развернул и протестировал свой веб-сервис, вызвав его с моего локального компьютера.Однако при тестировании созданной мной лазурной функции, которая вызывает веб-сервис, я получаю только «500 Internal Server Error» без дополнительной информации.

Код для приложения логики выглядит следующим образом:

public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
        Dictionary<string, string> parameters = new Dictionary<string, string>();
        parameters.Add("message", "Test Ticket via Run");
        string methodName = "CreateTicket";
        string soapStr =
                @"<soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""
               xmlns:xsd=""http://www.w3.org/2001/XMLSchema""
               xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">
              <soap:Body>
                <{0} xmlns=""http://tempuri.org/"">
                  {1}
                </{0}>
              </soap:Body>
            </soap:Envelope>";

        string postValues = "";
        foreach (var param in parameters)
        {
            postValues += string.Format("<{0}>{1}</{0}>", param.Key, param.Value);
        }

        soapStr = string.Format(soapStr, methodName, postValues);

        HttpWebRequest webreq = (HttpWebRequest)WebRequest.Create(<HttpsURL>);
        webreq.Headers.Add("SOAPAction", @"http://tempuri.org/<ServiceName>/CreateTicket");
        webreq.ContentType = "text/xml;charset=\"utf-8\"";
        webreq.Accept = "text/xml";
        webreq.Method = "POST";

        using (Stream stream = webreq.GetRequestStream())
        {
            using (StreamWriter sWriter = new StreamWriter(stream))
            {
                sWriter.Write(soapStr);
            }
        }
        try
        {
            using (StreamReader responseReader = new StreamReader(webreq.GetResponse().GetResponseStream()))
            {
                string response = responseReader.ReadToEnd();
                return (ActionResult)new OkObjectResult("Message Sent Successfully");
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
            return new BadRequestObjectResult(e.InnerException);
        }
}

Материал, который я пробовал:

Отключение пользовательских ошибок:

<system.web>
    <customErrors mode="Off"/>
</system.web>

Транспортная привязка:

<webHttpBinding>
    <binding name="WebConfiguration" maxBufferSize="65536" maxReceivedMessageSize="2000000000" transferMode="Streamed">
      <security mode="Transport"/>
    </binding>
</webHttpBinding>

Подробные ошибки (чтобы попытаться получить сообщение об исключении 500)

<system.webServer>
    <httpErrors errorMode="Detailed" />
    <asp scriptErrorSentToBrowser="true"/>
</system.webServer>

Я также пытался связать учетную запись интеграции с сертификатом сервера с ресурсомгруппа на Azure, но это тоже не имеет значения.Трассировка невыполненных запросов включена для веб-службы, на которой он размещен, но журналы не созданы.

По сути, у меня есть вызовы к этому веб-сервису, работающие из моего локального региона, но я не могу заставить приложения логики вызвать его успешно, а также не могу получить какую-либо полезную информацию о том, почему это не удалось.У меня следующие вопросы:

1) Как лучше всего получить более подробное сообщение об ошибке на моем сервере и / или Azure?2) Нужно ли включать специальные разрешения в Azure для взаимодействия с внешними API?3) Это правильный способ заставить приложения логики вызывать конечную точку?

Спасибо за любую помощь!Дайте мне знать, если потребуется дополнительная информация!

~ Джош

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...