查询Exchange Web服务失败,并显示400错误请求 [英] Querying Exchange Web Services fails with 400 Bad Request

查看:107
本文介绍了查询Exchange Web服务失败,并显示400错误请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用EWS和Powershell从特定的日历中获取一些信息. 我有一个用于查询EWS的powershell函数

I am trying to get some information from a specific calendar using EWS and Powershell. I have a powershell function that I use to query EWS

    Function EWSSoapRequest
{
    param (
        $soapRequest,
        $exchangeServerAddress

    )
    # Create the request
    $webRequest = [System.Net.WebRequest]::Create($exchangeServerAddress)
    $webRequest.ContentType = "text/xml"
    $webRequest.Headers.Add("Translate", "F")
    $webRequest.Method = "Post"
    $webRequest.Credentials = $credentials

    # Setup the soap request to send to the server
    $content = [System.Text.Encoding]::UTF8.GetBytes($soapRequest)
    $webRequest.ContentLength = $content.Length
    $requestStream = $webRequest.GetRequestStream()
    $requestStream.Write($content, 0, $content.Length)
    $requestStream.Close()

    # Get the xml response from the server
    $webResponse = $webRequest.GetResponse()
    $responseStream = $webResponse.GetResponseStream()
    $responseXml = [xml](new-object System.IO.StreamReader $responseStream).ReadToEnd()
    $responseStream.Close()
    $webResponse.Close()
    $responseXml

}

使用以下XML,我可以很好地获得日历项目的列表:

I can get the list of calendar items just fine, using this XML:

$soapRequestOverview = @'
<?xml version="1.0" encoding="utf-8"?>
  <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="Exchange2010_SP2" />
      <t:ExchangeImpersonation>
        <t:ConnectingSID>
          <t:SmtpAddress>user@domain.dk</t:SmtpAddress>
        </t:ConnectingSID>
      </t:ExchangeImpersonation>
    </soap:Header>
  <soap:Body>
    <FindItem Traversal="Shallow" xmlns="http://schemas.microsoft.com/exchange/services/2006/messages">
      <ItemShape>
        <t:BaseShape>IdOnly</t:BaseShape>
        <t:AdditionalProperties>
          <t:FieldURI FieldURI="calendar:Start"/>
          <t:FieldURI FieldURI="calendar:End"/>
          <t:FieldURI FieldURI="item:Subject"/>
        </t:AdditionalProperties>
      </ItemShape>
      <CalendarView MaxEntriesReturned="100" StartDate="{0}" EndDate="{1}"/>
      <ParentFolderIds>
        <t:DistinguishedFolderId Id="calendar"/>
      </ParentFolderIds>
    </FindItem>
  </soap:Body>
</soap:Envelope>
'@

这给了我给定日历中的条目列表(我在调用Web服务功能之前替换了状态和结束日期.然后从返回的日历项目列表中,我使用ItemID属性尝试查询诸如位置的详细信息等等.但是在这里我遇到了问题.

That gives me a list of entries in the given calendar (I replace the state and end date before calling the web service function. Then from the list of calendar items returned I use the ItemID property to try and query detailed information like location etc. But it is here I run into problems.

我使用此XML进行查询,并像以前一样使用EWSSoapRequest函数,但我不断收到400错误请求.如果我将xml复制/粘贴到SoapUI中,则得到的响应与预期数据完全一样.

I use this XML to make the query and use the EWSSoapRequest function as before, but I keep getting 400 Bad request back. If I copy/paste the xml into SoapUI then I get a response just fine with the expected data.

    $SoapRequestDetail = @'
  <?xml version="1.0" encoding="utf-8"?>
  <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="Exchange2010_SP2" />
      <t:ExchangeImpersonation>
        <t:ConnectingSID>
          <t:SmtpAddress>user@domain.dk</t:SmtpAddress>
        </t:ConnectingSID>
      </t:ExchangeImpersonation>
    </soap:Header>
    <soap:Body>
      <m:GetItem>
        <m:ItemShape>
          <t:BaseShape>AllProperties</t:BaseShape>
        </m:ItemShape>
        <m:ItemIds>
          <t:ItemId Id="AAMkADU3MzNlNjQxLTA3NDYtNDA4MS1hMmJhLTg5MmUxOTM2NzI3YwBGAAAAAABifraNBbAgRq+5NEGUOyNbBwBOxvhv/eH/R6wHrO/Hc4RhAAABnAHkAAChTN/6w47WS4YxX5iYDfnHAABfYm2zAAA=" />
        </m:ItemIds>
      </m:GetItem>
    </soap:Body>
  </soap:Envelope>
'@

是我俯瞰明显的东西吗?

Is it just me overlooking something obvious ?

推荐答案

尝试改用此XML

<?xml version="1.0" encoding="utf-8"?>
<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/"
  xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
   <soap:Header>
     <t:RequestServerVersion Version="Exchange2010_SP2" />
     <t:ExchangeImpersonation>
       <t:ConnectingSID>
         <t:SmtpAddress>user@domain.com</t:SmtpAddress>
       </t:ConnectingSID>
     </t:ExchangeImpersonation>
</soap:Header>
  <soap:Body>
    <GetItem
      xmlns="http://schemas.microsoft.com/exchange/services/2006/messages"
      xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
      <ItemShape>
        <t:BaseShape>AllProperties</t:BaseShape>
      </ItemShape>
      <ItemIds>
        <t:ItemId Id="AAAlAF" />
      </ItemIds>
    </GetItem>
  </soap:Body>
</soap:Envelope>

欢呼 格伦

这篇关于查询Exchange Web服务失败,并显示400错误请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆