C# WebDAV Exchange 2003在指定日期时失败

C# WebDAV Exchange 2003在指定日期时失败,c#,exchange-server,webdav,C#,Exchange Server,Webdav,我正在使用以下代码从Exchange2003服务器检索电子邮件。星期五一切正常,现在失败了 根据一些调查,我将其缩小到targetDate变量。似乎如果日期是在4月,它会失败,服务器返回400。我已经对这一行进行了注释,并尝试了2012-3-29、2012-4-1、2012-4-10(今天)的不同日期,而4月份的日期似乎失败了 某种愚人节的玩笑 代码本身来源于本文: public XmlDocument GetMailAll() { HttpWebRequest=default(HttpWebR

我正在使用以下代码从Exchange2003服务器检索电子邮件。星期五一切正常,现在失败了

根据一些调查,我将其缩小到targetDate变量。似乎如果日期是在4月,它会失败,服务器返回400。我已经对这一行进行了注释,并尝试了2012-3-29、2012-4-1、2012-4-10(今天)的不同日期,而4月份的日期似乎失败了

某种愚人节的玩笑

代码本身来源于本文:

public XmlDocument GetMailAll()
{
HttpWebRequest=default(HttpWebRequest);
HttpWebResponse=默认值(HttpWebResponse);
字符串rootUri=null;
字符串查询=null;
字节[]字节=null;
Stream requestStream=默认值(流);
Stream responseStream=默认值(流);
XmlDocument xmlDoc=默认值(XmlDocument);
xmlDoc=新的XmlDocument();
尝试
{
DateTime targetDateTime=DateTime.Today.AddDays(-5);
字符串targetDate=“”+targetDateTime.Year+“-”+targetDateTime.Month+“-”+targetDateTime.Day;
rootUri=server+“/Exchange/”+别名+“/”+收件箱;
query=“”
+ ""
+“选择\“urn:schemas:httpmail:hasattachment\”,\“DAV:displayname\”,”
+“urn:schemas:httpmail:from\,\“urn:schemas:httpmail:subject\,”
//+“\”urn:schemas:httpmail:htmldescription\”,“//返回全文(现在不需要)
+“\”urn:schemas:httpmail:datereceived\”,“\”urn:schemas:httpmail:read\”FROM\”“+rootUri
+“\”其中\“DAV:ishiden\”=false”
+“和\“DAV:isfolder\”=false”
//+“和\”urn:schemas:httpmail:read \“=false”
+“和\“urn:schemas:httpmail:datereceived\”>=CAST(\”“+targetDate+“T00:00:000Z\”作为'dateTime.tz')”
+ "";
request=(HttpWebRequest)WebRequest.Create(rootUri);
请求超时=5000;
request.Credentials=新的网络凭据(别名、密码、域);
request.Method=“SEARCH”;
request.ContentType=“text/xml”;
请求。标题。添加(“翻译”、“F”);
bytes=System.Text.Encoding.UTF8.GetBytes(查询);
request.ContentLength=字节.Length;
requestStream=request.GetRequestStream();
requestStream.Write(字节、0、字节、长度);
requestStream.Close();
response=(HttpWebResponse)request.GetResponse();
authCookies=新列表();
foreach(响应中的Cookie.Cookies)
{
添加(cookie);
}
responseStream=response.GetResponseStream();
xmlDoc.Load(responseStream);
responseStream.Close();
}
捕获(WebException ex)
{
如果(例如响应==null)
{
抛出新异常();
}
else if((例如,响应为HttpWebResponse.StatusCode==HttpStatusCode.Unauthorized)
{
抛出新的ExchangeCatastrophiceException();
}
其他的
{
抛出新的ExchangeFileDexception();
}
}
捕获(例外情况除外)
{
投掷;
}
返回xmlDoc;
}

终于让它工作了。准确的浇铸目标日期,包括T00:00:…Z零件,必须符合

我现在有:

DateTime targetDateTime = DateTime.Today;
string targetDate = targetDateTime.ToString("yyyy-MM-dd");
剪断

请注意,秒数部分是两个零,而不是三个

DateTime targetDateTime = DateTime.Today;
string targetDate = targetDateTime.ToString("yyyy-MM-dd");
+ "AND \"urn:schemas:httpmail:datereceived\" >= CAST(\"" + targetDate + "T00:00:00Z" + "\" AS 'dateTime.tz')"