Exchange Web Services and Internet Message Headers
2007-10-26 10:55
537 查看
Exchage Web 服务和 Internet 消息头
这是文章的标题,不知道这样翻译对不对,但感觉还行,这篇文章我正在看,感觉不错,就转载了,等我真正的了解之后,我会详细的翻译出来的,或者至少把原理自己写出来,和大家分享
翻译的文章点击这里:
http://blog.csdn.net/zhangyunbo1116/archive/2007/11/18/1891557.aspx
导读:
We had a customer asking how to use the InternetMessageHeaders property in EWS. The found that if they asked for the prop, they only got the names of the headers, but not the values. This is one of those areas (like attachments) where EWS is only going to fetch the minimal amount of data, avoiding potentially expensive operations until you explicitly ask for them. In this case, once you have the names of the headers, you can make another call back to fetch their values. Of course, if you already knew the name of a header you wanted, then you could skip the middle step and ask for it directly.
I've updated my earlier sample to illustrate the technique.
using System;
using EWS;
using System.Net;
namespace GetProps
{
class Program
{
static void Main(string[] args)
{
ExchangeServiceBinding exchangeServer = new ExchangeServiceBinding();
ICredentials creds = new NetworkCredential("SomeUser", "SomePassword", "SomeDomain");
exchangeServer.Credentials = creds;
exchangeServer.Url = @"http://MyServer/EWS/Exchange.asmx";
DistinguishedFolderIdType[] folderIDArray = new DistinguishedFolderIdType[1];
folderIDArray[0] = new DistinguishedFolderIdType();
folderIDArray[0].Id = DistinguishedFolderIdNameType.inbox;
PathToUnindexedFieldType ptuftDisplayName = new PathToUnindexedFieldType();
ptuftDisplayName.FieldURI = UnindexedFieldURIType.folderDisplayName;
PathToExtendedFieldType pteftComment = new PathToExtendedFieldType();
pteftComment.PropertyTag = "0x3004"; // PR_COMMENT
pteftComment.PropertyType = MapiPropertyTypeType.String;
GetFolderType myfoldertype = new GetFolderType();
myfoldertype.FolderIds = folderIDArray;
myfoldertype.FolderShape = new FolderResponseShapeType();
myfoldertype.FolderShape.BaseShape = DefaultShapeNamesType.IdOnly;
myfoldertype.FolderShape.AdditionalProperties = new BasePathToElementType[2];
myfoldertype.FolderShape.AdditionalProperties[0] = ptuftDisplayName;
myfoldertype.FolderShape.AdditionalProperties[1] = pteftComment;
Console.WriteLine("Getting inbox");
GetFolderResponseType myFolder = exchangeServer.GetFolder(myfoldertype);
FolderInfoResponseMessageType firmtInbox =
(FolderInfoResponseMessageType) myFolder.ResponseMessages.Items[0];
Console.WriteLine("got folder: {0}",firmtInbox.Folders[0].DisplayName);
if (null != firmtInbox.Folders[0].ExtendedProperty)
{
Console.WriteLine("Comment: {0}",firmtInbox.Folders[0].ExtendedProperty[0].Item.ToString());
}
else
{
Console.WriteLine("Comment: not found");
}
PathToUnindexedFieldType ptuftSubject = new PathToUnindexedFieldType();
ptuftSubject.FieldURI = UnindexedFieldURIType.itemSubject;
PathToExtendedFieldType pteftFlagStatus = new PathToExtendedFieldType();
pteftFlagStatus.PropertyTag = "0x1090"; // PR_FLAG_STATUS
pteftFlagStatus.PropertyType = MapiPropertyTypeType.Integer;
FindItemType findItemRequest = new FindItemType();
findItemRequest.Traversal = ItemQueryTraversalType.Shallow;
findItemRequest.ItemShape = new ItemResponseShapeType();
findItemRequest.ItemShape.BaseShape = DefaultShapeNamesType.IdOnly;
findItemRequest.ItemShape.AdditionalProperties = new BasePathToElementType[2];
findItemRequest.ItemShape.AdditionalProperties[0] = ptuftSubject;
findItemRequest.ItemShape.AdditionalProperties[1] = pteftFlagStatus;
findItemRequest.ParentFolderIds = new FolderIdType[] { firmtInbox.Folders[0].FolderId };
FindItemResponseType firt = exchangeServer.FindItem(findItemRequest);
foreach (FindItemResponseMessageType firmtMessage in firt.ResponseMessages.Items)
{
if (null != firmtMessage.RootFolder &&firmtMessage.RootFolder.TotalItemsInView >0)
{
foreach (ItemType it in ((ArrayOfRealItemsType)firmtMessage.RootFolder.Item).Items)
{
Console.WriteLine("got item: {0}",it.Subject);
if (null != it.ExtendedProperty)
{
Console.WriteLine("Prop PR_FLAG_STATUS: {0}",it.ExtendedProperty[0].Item.ToString());
}
else
{
Console.WriteLine("Prop PR_FLAG_STATUS: not found");
}
PathToUnindexedFieldType ptuftHeaders = new PathToUnindexedFieldType();
ptuftHeaders.FieldURI = UnindexedFieldURIType.itemInternetMessageHeaders;
PathToExtendedFieldType ptuftHeadersProp = new PathToExtendedFieldType();
ptuftHeadersProp.PropertyTag = "0x007D"; // PR_TRANSPORT_MESSAGE_HEADERS
ptuftHeadersProp.PropertyType = MapiPropertyTypeType.String;
GetItemType getItemRequest = new GetItemType();
getItemRequest.ItemIds = new ItemIdType[] { it.ItemId };
getItemRequest.ItemShape = new ItemResponseShapeType();
getItemRequest.ItemShape.BaseShape = DefaultShapeNamesType.IdOnly;
getItemRequest.ItemShape.AdditionalProperties = new BasePathToElementType[2];
getItemRequest.ItemShape.AdditionalProperties[0] = ptuftHeaders;
getItemRequest.ItemShape.AdditionalProperties[1] = ptuftHeadersProp;
GetItemResponseType girt = exchangeServer.GetItem(getItemRequest);
foreach (ItemInfoResponseMessageType grmtMessage in girt.ResponseMessages.Items)
{
ItemType item = grmtMessage.Items.Items[0];
if (null != item.ExtendedProperty)
{
Console.WriteLine("Prop PR_TRANSPORT_MESSAGE_HEADERS:/n {0}", item.ExtendedProperty[0].Item.ToString());
}
else
{
Console.WriteLine("Prop PR_TRANSPORT_MESSAGE_HEADERS: not found");
}
Console.WriteLine();
if (null != item.InternetMessageHeaders)
{
PathToIndexedFieldType[] headerProps = new PathToIndexedFieldType[item.InternetMessageHeaders.Length];
int index = 0;
foreach (InternetHeaderType iht in item.InternetMessageHeaders)
{
PathToIndexedFieldType headerProp = new PathToIndexedFieldType();
headerProp.FieldURI = DictionaryURIType.itemInternetMessageHeader;
headerProp.FieldIndex = iht.HeaderName;
headerProps[index++] = headerProp;
}
GetItemType getItemRequest2 = new GetItemType();
getItemRequest2.ItemIds = new ItemIdType[] { it.ItemId };
getItemRequest2.ItemShape = new ItemResponseShapeType();
getItemRequest2.ItemShape.BaseShape = DefaultShapeNamesType.IdOnly;
getItemRequest2.ItemShape.AdditionalProperties = headerProps;
GetItemResponseType girt2 = exchangeServer.GetItem(getItemRequest2);
foreach (ItemInfoResponseMessageType grmtMessage2 in girt2.ResponseMessages.Items)
{
ItemType item2 = grmtMessage2.Items.Items[0];
if (null != item2.InternetMessageHeaders)
{
Console.Write("Parsing internet headers");
foreach (InternetHeaderType iht2 in item2.InternetMessageHeaders)
{
if (null != iht2.HeaderName)
{
Console.Write("Header {0}", iht2.HeaderName.ToString());
if (null != iht2.Value)
{
Console.WriteLine(" = {0}", iht2.Value.ToString());
}
else Console.WriteLine(" is null");
}
}
}
}
}
}
Console.WriteLine();
}
}
}
Console.WriteLine("/nHit any key to continue");
Console.ReadKey(true);
}
}
}
本文转自
http://blogs.msdn.com/stephen_griffin/archive/2007/02/09/exchange-web-services-and-internet-message-headers.aspx
这是文章的标题,不知道这样翻译对不对,但感觉还行,这篇文章我正在看,感觉不错,就转载了,等我真正的了解之后,我会详细的翻译出来的,或者至少把原理自己写出来,和大家分享
翻译的文章点击这里:
http://blog.csdn.net/zhangyunbo1116/archive/2007/11/18/1891557.aspx
导读:
We had a customer asking how to use the InternetMessageHeaders property in EWS. The found that if they asked for the prop, they only got the names of the headers, but not the values. This is one of those areas (like attachments) where EWS is only going to fetch the minimal amount of data, avoiding potentially expensive operations until you explicitly ask for them. In this case, once you have the names of the headers, you can make another call back to fetch their values. Of course, if you already knew the name of a header you wanted, then you could skip the middle step and ask for it directly.
I've updated my earlier sample to illustrate the technique.
using System;
using EWS;
using System.Net;
namespace GetProps
{
class Program
{
static void Main(string[] args)
{
ExchangeServiceBinding exchangeServer = new ExchangeServiceBinding();
ICredentials creds = new NetworkCredential("SomeUser", "SomePassword", "SomeDomain");
exchangeServer.Credentials = creds;
exchangeServer.Url = @"http://MyServer/EWS/Exchange.asmx";
DistinguishedFolderIdType[] folderIDArray = new DistinguishedFolderIdType[1];
folderIDArray[0] = new DistinguishedFolderIdType();
folderIDArray[0].Id = DistinguishedFolderIdNameType.inbox;
PathToUnindexedFieldType ptuftDisplayName = new PathToUnindexedFieldType();
ptuftDisplayName.FieldURI = UnindexedFieldURIType.folderDisplayName;
PathToExtendedFieldType pteftComment = new PathToExtendedFieldType();
pteftComment.PropertyTag = "0x3004"; // PR_COMMENT
pteftComment.PropertyType = MapiPropertyTypeType.String;
GetFolderType myfoldertype = new GetFolderType();
myfoldertype.FolderIds = folderIDArray;
myfoldertype.FolderShape = new FolderResponseShapeType();
myfoldertype.FolderShape.BaseShape = DefaultShapeNamesType.IdOnly;
myfoldertype.FolderShape.AdditionalProperties = new BasePathToElementType[2];
myfoldertype.FolderShape.AdditionalProperties[0] = ptuftDisplayName;
myfoldertype.FolderShape.AdditionalProperties[1] = pteftComment;
Console.WriteLine("Getting inbox");
GetFolderResponseType myFolder = exchangeServer.GetFolder(myfoldertype);
FolderInfoResponseMessageType firmtInbox =
(FolderInfoResponseMessageType) myFolder.ResponseMessages.Items[0];
Console.WriteLine("got folder: {0}",firmtInbox.Folders[0].DisplayName);
if (null != firmtInbox.Folders[0].ExtendedProperty)
{
Console.WriteLine("Comment: {0}",firmtInbox.Folders[0].ExtendedProperty[0].Item.ToString());
}
else
{
Console.WriteLine("Comment: not found");
}
PathToUnindexedFieldType ptuftSubject = new PathToUnindexedFieldType();
ptuftSubject.FieldURI = UnindexedFieldURIType.itemSubject;
PathToExtendedFieldType pteftFlagStatus = new PathToExtendedFieldType();
pteftFlagStatus.PropertyTag = "0x1090"; // PR_FLAG_STATUS
pteftFlagStatus.PropertyType = MapiPropertyTypeType.Integer;
FindItemType findItemRequest = new FindItemType();
findItemRequest.Traversal = ItemQueryTraversalType.Shallow;
findItemRequest.ItemShape = new ItemResponseShapeType();
findItemRequest.ItemShape.BaseShape = DefaultShapeNamesType.IdOnly;
findItemRequest.ItemShape.AdditionalProperties = new BasePathToElementType[2];
findItemRequest.ItemShape.AdditionalProperties[0] = ptuftSubject;
findItemRequest.ItemShape.AdditionalProperties[1] = pteftFlagStatus;
findItemRequest.ParentFolderIds = new FolderIdType[] { firmtInbox.Folders[0].FolderId };
FindItemResponseType firt = exchangeServer.FindItem(findItemRequest);
foreach (FindItemResponseMessageType firmtMessage in firt.ResponseMessages.Items)
{
if (null != firmtMessage.RootFolder &&firmtMessage.RootFolder.TotalItemsInView >0)
{
foreach (ItemType it in ((ArrayOfRealItemsType)firmtMessage.RootFolder.Item).Items)
{
Console.WriteLine("got item: {0}",it.Subject);
if (null != it.ExtendedProperty)
{
Console.WriteLine("Prop PR_FLAG_STATUS: {0}",it.ExtendedProperty[0].Item.ToString());
}
else
{
Console.WriteLine("Prop PR_FLAG_STATUS: not found");
}
PathToUnindexedFieldType ptuftHeaders = new PathToUnindexedFieldType();
ptuftHeaders.FieldURI = UnindexedFieldURIType.itemInternetMessageHeaders;
PathToExtendedFieldType ptuftHeadersProp = new PathToExtendedFieldType();
ptuftHeadersProp.PropertyTag = "0x007D"; // PR_TRANSPORT_MESSAGE_HEADERS
ptuftHeadersProp.PropertyType = MapiPropertyTypeType.String;
GetItemType getItemRequest = new GetItemType();
getItemRequest.ItemIds = new ItemIdType[] { it.ItemId };
getItemRequest.ItemShape = new ItemResponseShapeType();
getItemRequest.ItemShape.BaseShape = DefaultShapeNamesType.IdOnly;
getItemRequest.ItemShape.AdditionalProperties = new BasePathToElementType[2];
getItemRequest.ItemShape.AdditionalProperties[0] = ptuftHeaders;
getItemRequest.ItemShape.AdditionalProperties[1] = ptuftHeadersProp;
GetItemResponseType girt = exchangeServer.GetItem(getItemRequest);
foreach (ItemInfoResponseMessageType grmtMessage in girt.ResponseMessages.Items)
{
ItemType item = grmtMessage.Items.Items[0];
if (null != item.ExtendedProperty)
{
Console.WriteLine("Prop PR_TRANSPORT_MESSAGE_HEADERS:/n {0}", item.ExtendedProperty[0].Item.ToString());
}
else
{
Console.WriteLine("Prop PR_TRANSPORT_MESSAGE_HEADERS: not found");
}
Console.WriteLine();
if (null != item.InternetMessageHeaders)
{
PathToIndexedFieldType[] headerProps = new PathToIndexedFieldType[item.InternetMessageHeaders.Length];
int index = 0;
foreach (InternetHeaderType iht in item.InternetMessageHeaders)
{
PathToIndexedFieldType headerProp = new PathToIndexedFieldType();
headerProp.FieldURI = DictionaryURIType.itemInternetMessageHeader;
headerProp.FieldIndex = iht.HeaderName;
headerProps[index++] = headerProp;
}
GetItemType getItemRequest2 = new GetItemType();
getItemRequest2.ItemIds = new ItemIdType[] { it.ItemId };
getItemRequest2.ItemShape = new ItemResponseShapeType();
getItemRequest2.ItemShape.BaseShape = DefaultShapeNamesType.IdOnly;
getItemRequest2.ItemShape.AdditionalProperties = headerProps;
GetItemResponseType girt2 = exchangeServer.GetItem(getItemRequest2);
foreach (ItemInfoResponseMessageType grmtMessage2 in girt2.ResponseMessages.Items)
{
ItemType item2 = grmtMessage2.Items.Items[0];
if (null != item2.InternetMessageHeaders)
{
Console.Write("Parsing internet headers");
foreach (InternetHeaderType iht2 in item2.InternetMessageHeaders)
{
if (null != iht2.HeaderName)
{
Console.Write("Header {0}", iht2.HeaderName.ToString());
if (null != iht2.Value)
{
Console.WriteLine(" = {0}", iht2.Value.ToString());
}
else Console.WriteLine(" is null");
}
}
}
}
}
}
Console.WriteLine();
}
}
}
Console.WriteLine("/nHit any key to continue");
Console.ReadKey(true);
}
}
}
本文转自
http://blogs.msdn.com/stephen_griffin/archive/2007/02/09/exchange-web-services-and-internet-message-headers.aspx
相关文章推荐
- Web Portals: : The New Gateways to Internet Information and Services
- Exchange Web Services and VS 2008 (Missing ExchangeServiceBinding)
- Exchange Web Services and VS 2008 (Missing ExchangeServiceBinding)
- Build Secure Web Services With SOAP Headers and Extensions
- Top 10 SOA and Web services tutorials and articles -- October 2008
- Mobile Web Services: Architecture and Implementation
- windows&mac 的web服务 IIS-internet information services&apchectl 内网穿透服务
- Content Based Routing Web Services in .NET and J2EE
- Web Services and C# Enums
- soa and webservices material list come from ibm
- Internet – Web to Remote WCF Using Message Security (Original Caller)
- Internet Information Services is not installed. You must have Internet Information Services installed in order to use the SharePoint Products and Technologies Configuration Wizard
- Java Web services and Apache Tomcat
- XML Programming: Web Applications and Web Services With JSP and ASP
- Interoperable WSDL faults in gSOAP and Apache Axis webservices
- [译] Exchange Web Services Managed API 1.0 入门
- Web Services And Ajax
- 060909 今天初步接触SOA and Web services
- On-Designing-and-Deploying-Internet-Scale-Services
- SOAP Binding: Difference between Document and RPC Style Web Services