EWS无法使用XML

时间:2018-03-02 21:23:51

标签: xml exchangewebservices

我想使用带有XML的Exchange Web Services SOAP API更新我的交换联系人。 我已经(煞费苦心地)想出如何更新除电话号码以外的所有我想要的属性。

我遵循用于更新EmailAddresses的模式(因为它们都是索引字段)。以下是我的XML请求示例:

<t:SetItemField>
  <t:IndexedFieldURI FieldURI="contacts:PhoneNumber" FieldIndex="BusinessPhone"/>
    <Contact xmlns="http://schemas.microsoft.com/exchange/services/2006/types">
    <PhoneNumbers>
      <Entry key="BusinessPhone">888-777-6666</Entry>
    </PhoneNumbers>
  </Contact>
</t:SetItemField>

这是我从Exchange收到的错误消息:

  

发生内部服务器错误。操作失败。,Key   &#39; PHONENUMBERS&#39;找不到类型   &#39; Microsoft.Exchange.Services.Core.Types.ContactItemType&#39;

看到此操作的XML基本上没有记录,我怀疑我是否错误地为PhoneNumber格式化XML。

对于使用EWS Managed API 2.0的任何人,您是否可以执行此操作并跟踪XML输出,以便我可以看到它是如何正确完成的?

非常感谢任何其他导致解决方案的信息!

谢谢

1 个答案:

答案 0 :(得分:1)

  
    

看到此操作的XML基本上没有记录,我怀疑我是否错误地为PhoneNumber格式化XML。

  

MSDN上的所有XML元素都有完整的文档https://msdn.microsoft.com/en-us/library/office/aa580675(v=exchg.150).aspx,协议文档也有相当全面的覆盖https://msdn.microsoft.com/en-us/library/cc425499(v=exchg.80).aspx

根据您的要求,我可以重现您需要修复的错误,只需将K大写,例如

<Entry key="BusinessPhone">888-777-6666</Entry>  

<Entry Key="BusinessPhone">888-777-6666</Entry>

SOAP(或至少它在EWS中的实现方式)特别围绕元素的情况和顺序。这是为我工作的修改后的SOAP

  <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Header>
      <t:RequestServerVersion Version="Exchange2013_SP1" />
    </soap:Header>
    <soap:Body>
      <m:UpdateItem MessageDisposition="SaveOnly" ConflictResolution="AlwaysOverwrite">
        <m:ItemChanges>
          <t:ItemChange>
            <t:ItemId Id="A...A=" ChangeKey="EQA....Z" />
            <t:Updates>
            <t:SetItemField>
               <t:IndexedFieldURI FieldURI="contacts:PhoneNumber" FieldIndex="BusinessPhone"/>
              <Contact xmlns="http://schemas.microsoft.com/exchange/services/2006/types">
              <PhoneNumbers>
                <Entry Key="BusinessPhone">888-777-6666</Entry>
              </PhoneNumbers>
             </Contact>
            </t:SetItemField>
            </t:Updates>
          </t:ItemChange>
        </m:ItemChanges>
      </m:UpdateItem>
    </soap:Body>
  </soap:Envelope>