Внутренняя ошибка сервера в операции CreateItem EWS

Я использую операцию CreateItem для сохранения сообщения в папке «Черновик» с помощью EWS с набором инструментов gSOAP, но когда я запускаю код, я получаю ответ XML следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Header>
        <Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">*</Action>
    </s:Header>
    <s:Body>
        <s:Fault>
            <faultcode xmlns:a="http://schemas.microsoft.com/exchange/services/2006/types">a:ErrorInternalServerError</faultcode>
            <faultstring xml:lang="en-US">An internal server error occurred. The operation failed.</faultstring>
            <detail>
                <e:ResponseCode xmlns:e="http://schemas.microsoft.com/exchange/services/2006/errors">ErrorInternalServerError</e:ResponseCode>
                <e:Message xmlns:e="http://schemas.microsoft.com/exchange/services/2006/errors">An internal server error occurred. The operation failed.</e:Message>
            </detail>
        </s:Fault>
    </s:Body>
</s:Envelope>

и в терминале ошибка, которая у меня есть:

SOAP 1.1 fault: SOAP-ENV:MustUnderstand[no subcode]
"The data in element 'Action' must be understood but cannot be processed"
Detail: [no detail]

и нет ошибки времени компиляции. Если вам нужен код, пожалуйста, дайте мне знать, я дам его тоже. Пожалуйста, помогите мне, я много пробовал, но не нашел решения, независимо от того, что я меняю в коде, ответный XML остается прежним.

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

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns1="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:ews="http://schemas.microsoft.com/exchange/services/2006/messages">
    <SOAP-ENV:Body>
        <ews:CreateItem xsi:type="ews:CreateItemType" MessageDisposition="SaveOnly"><ews:SavedItemFolderId xsi:type="ns1:TargetFolderIdType">
            <ns1:DistinguishedFolderId Id="drafts" xsi:type="ns1:DistinguishedFolderIdType"></ns1:DistinguishedFolderId>
        </ews:SavedItemFolderId>
        <ews:Items xsi:type="ns1:NonEmptyArrayOfAllItemsType">
            <ns1:Message xsi:type="ns1:MessageType">
                <ns1:ItemClass xsi:type="ns1:ItemClassType">IPM.Note</ns1:ItemClass>
                <ns1:Subject xsi:type="xsd:string">Project Action</ns1:Subject>
                <ns1:Body BodyType="Text" xsi:type="ns1:BodyType">Priority - Update specification</ns1:Body>
                <ns1:Sender xsi:type="ns1:SingleRecipientType">
                    <ns1:Mailbox xsi:type="ns1:EmailAddressType">
                        <ns1:EmailAddress xsi:type="ns1:NonEmptyStringType">[email protected]</ns1:EmailAddress>
                    </ns1:Mailbox>
                </ns1:Sender>
                <ns1:ToRecipients xsi:type="ns1:ArrayOfRecipientsType">
                    <ns1:Mailbox xsi:type="ns1:EmailAddressType">
                        <ns1:EmailAddress xsi:type="ns1:NonEmptyStringType">[email protected]</ns1:EmailAddress>
                    </ns1:Mailbox>
                </ns1:ToRecipients>
            </ns1:Message>
        </ews:Items>
    </ews:CreateItem>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

person Tushar Soni    schedule 10.12.2015    source источник


Ответы (2)


Я бы посоветовал вам избавиться от всех атрибутов xsi:type, например как удалить информацию xsi:type из сообщения gSoap?

Упрощенный ваш запрос должен выглядеть так

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns1="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:ews="http://schemas.microsoft.com/exchange/services/2006/messages">
    <SOAP-ENV:Body>
       <ews:CreateItem MessageDisposition="SaveOnly">
       <ews:SavedItemFolderId>
           <ns1:DistinguishedFolderId Id="drafts" />
        </ews:SavedItemFolderId>
        <ews:Items>
            <ns1:Message>
                <ns1:ItemClass>IPM.Note</ns1:ItemClass>
                <ns1:Subject>Project Action</ns1:Subject>
            </ns1:Message>
        </ews:Items>
    </ews:CreateItem>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Который работает нормально для меня.

ура Глен

person Glen Scales    schedule 11.12.2015
comment
Большое спасибо, Глен, это правильное решение моей проблемы, и теперь оно работает нормально. Спасибо!! - person Tushar Soni; 11.12.2015
comment
одна вещь, которую я хочу знать, это то, как я узнаю, что в будущем, когда мне придется использовать SOAP_XML_NOTYPE, или когда нет, поскольку некоторые операции работают нормально без использования этого SOAP_XML_NOTYPE, это FindItem и GetItem. - person Tushar Soni; 11.12.2015

Недавно я исследовал API EWS и обнаружил, что тег Sender вызывает ответ 500 с запросом CreateItem. Скорее, вы должны использовать тег From.

            <ns1:From xsi:type="ns1:SingleRecipientType">
                <ns1:Mailbox xsi:type="ns1:EmailAddressType">
                    <ns1:EmailAddress xsi:type="ns1:NonEmptyStringType">[email protected]</ns1:EmailAddress>
                </ns1:Mailbox>
            </ns1:From>
person apex-meme-lord    schedule 02.02.2016