Ого, это было действительно непредсказуемо.
Я заменил THTTPReqResp
компоненты на TipwHTTP
из IPWorks nSoftware. При этом используются все обычные типы String.
Но данные, отправляемые в EWS, должны быть в формате UTF-8
В конце концов мы говорим set ContentType := 'text/xml; charset=utf-8'
*. После преобразования мой код прочитал
lHTTP.PostData := FSoapRequest; // A string type
, но это должно быть
lHTTP.PostDataB := BytesOf(UTF8Encode(FSoapRequest)); // UTF8Encode returns a UTF-8 encoded RawByteString with a code page of CP_UTF8 (65001) assigned to it.
. Я выяснил это, внимательно посмотрев на неудавшиеся вызовы SOAP. Они содержали такие вещи, как слово «Оставленный одинарный кавычка» (U-2018, люди просто копируют / вставляют тексты Word в электронную почту) или даже простые диакритические знаки, такие как é и ü, которые вызывали эти ошибки.
* Да, 'utf-8' без кавычек, потому что это то, чего хочет Exchange Webservices
Примечания:
- Это довольно специфично c, поэтому Я думал об удалении вопроса, но ситуация, когда EWS не дает больше информации, чем «Внутренняя ошибка сервера», может возникнуть и для других. Хорошо бы оставить это как указатель для расследования.
- Ограниченная информация об ошибках заставила меня задать вопрос Как получить более подробную информацию об ошибках в ответе EWS SOAP?