C # Exchange Service неожиданно выдает ошибку Свойство Hashtags действительно только для Exchange Exchange2015 или более поздних версий. - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть служба Windows, написанная на C #, которая опрашивает сервер Exchange для обработки почты на ящик автоматической почты.

Она работала нормально, до сегодняшнего дня, когда выдает следующую ошибку: -

EXCEPTION: Microsoft.Exchange.WebServices.Data.ServiceVersionException: The property Hashtags is valid only for Exchange Exchange2015 or later versions.
   at Microsoft.Exchange.WebServices.Data.PropertyBag.set_Item(PropertyDefinition propertyDefinition, Object value)
   at Microsoft.Exchange.WebServices.Data.ComplexPropertyDefinitionBase.InternalLoadFromXml(EwsServiceXmlReader reader, PropertyBag propertyBag)
   at Microsoft.Exchange.WebServices.Data.ComplexPropertyDefinitionBase.LoadPropertyValueFromXml(EwsServiceXmlReader reader, PropertyBag propertyBag)
   at Microsoft.Exchange.WebServices.Data.PropertyBag.LoadFromXml(EwsServiceXmlReader reader, Boolean clear, PropertySet requestedPropertySet, Boolean onlySummaryPropertiesRequested)
   at Microsoft.Exchange.WebServices.Data.ServiceObject.LoadFromXml(EwsServiceXmlReader reader, Boolean clearPropertyBag, PropertySet requestedPropertySet, Boolean summaryPropertiesOnly)
   at Microsoft.Exchange.WebServices.Data.EwsServiceXmlReader.ReadServiceObjectsCollectionFromXml[TServiceObject](XmlNamespace collectionXmlNamespace, String collectionXmlElementName, GetObjectInstanceDelegate`1 getObjectInstanceDelegate, Boolean clearPropertyBag, PropertySet requestedPropertySet, Boolean summaryPropertiesOnly)
   at Microsoft.Exchange.WebServices.Data.EwsServiceXmlReader.ReadServiceObjectsCollectionFromXml[TServiceObject](String collectionXmlElementName, GetObjectInstanceDelegate`1 getObjectInstanceDelegate, Boolean clearPropertyBag, PropertySet requestedPropertySet, Boolean summaryPropertiesOnly)
   at Microsoft.Exchange.WebServices.Data.GetItemResponse.ReadElementsFromXml(EwsServiceXmlReader reader)
   at Microsoft.Exchange.WebServices.Data.ServiceResponse.LoadFromXml(EwsServiceXmlReader reader, String xmlElementName)
   at Microsoft.Exchange.WebServices.Data.MultiResponseServiceRequest`1.ParseResponse(EwsServiceXmlReader reader)
   at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.ParseResponse(EwsServiceXmlReader reader, WebHeaderCollection responseHeaders)
   at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.ReadResponse(EwsServiceXmlReader ewsXmlReader, WebHeaderCollection responseHeaders)
   at Microsoft.Exchange.WebServices.Data.SimpleServiceRequestBase.ReadResponseXml(Stream responseStream, WebHeaderCollection responseHeaders)
   at Microsoft.Exchange.WebServices.Data.SimpleServiceRequestBase.ReadResponse(IEwsHttpWebResponse response)
   at Microsoft.Exchange.WebServices.Data.SimpleServiceRequestBase.InternalExecute()
   at Microsoft.Exchange.WebServices.Data.MultiResponseServiceRequest`1.Execute()
   at Microsoft.Exchange.WebServices.Data.ExchangeService.InternalLoadPropertiesForItems(IEnumerable`1 items, PropertySet propertySet, ServiceErrorHandling errorHandling)
   at Microsoft.Exchange.WebServices.Data.ExchangeService.LoadPropertiesForItems(IEnumerable`1 items, PropertySet propertySet)
   at MyServiceName.MyServiceName.CheckForNewEmails(ExchangeService service) in C:\TFSOnline\RPM Tools\MyServiceName\MyServiceName\MyServiceName.cs:line 177
   at MyServiceName.MyServiceName.RunACheck(Object state) in C:\TFSOnline\RPM Tools\MyServiceName\MyServiceName\MyServiceName.cs:line 117

Строка, вызывающая сбой:

PropertySet properties = (BasePropertySet.FirstClassProperties);
service.LoadPropertiesForItems(emails, properties);

Конкретная ошибка:

Microsoft.Exchange.WebServices.Data.ServiceVersionException: 
The property Hashtags is valid only for Exchange Exchange2015 or later versions.

Я нигде не использую или не обращаюсь к хэштегам, поэтому предположительно он содержитсяв BasePropertySet.FirstClassProperties.

Как я уже упоминал, я до сих пор успешно использовал приведенный выше код, сегодня он только начинает выдавать эту ошибку.

Я использую последнюю версию EWSСтабильная сборка: Exchange.WebServices.Managed.Api 2.2.1.1

BasePropertySet имеет только еще один элемент, IdOnly, и свойство, которое мне нужно, это InternetMessageId, поэтому я решил, что просто буду использовать это:

PropertySet properties = (BasePropertySet.IdOnly);
service.LoadPropertiesForItems(emails, properties);

Оказывается, InternetMessageId не покрывается свойством для получения идентификаторов ...

EXCEPTION: Microsoft.Exchange.WebServices.Data.ServiceObjectPropertyException: 
You must load or assign this property before you can read its value.
   at Microsoft.Exchange.WebServices.Data.PropertyBag.get_Item(PropertyDefinition propertyDefinition)
   at Microsoft.Exchange.WebServices.Data.EmailMessage.get_InternetMessageId()

Часть кода, сообщающая об ошибке, не изменилась, и, насколько я могу,скажи, что былонет обновления для Office 365. Это влияет на Exchange.

Чтобы перепроверить, я взял предыдущую версию (скомпилированный код, а не исходный код, который я перекомпилировал) и установил ее вместо: все еще получала ту же ошибку.

Кто-нибудь имел эту ошибку раньше?Я гуглил его, но не получил ни одного удара.

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

По-прежнему получайте ту же ошибку, даже с предыдущим кодом.

Ответы [ 5 ]

0 голосов
/ 24 июня 2019

У меня была такая же проблема.Я заметил, что мы оба не указали, какой сервер обмена мы используем.Это работало для меня долгое время, но в итоге я получил эту ошибку.Указание, какой сервер обмена исправил это для меня.

0 голосов
/ 03 октября 2018

Вы также можете попытаться установить требуемый ServerServerVersion в конструкторе ExchangeService явно на что-то более высокое.Для Office365 помните, что EWS не получает дальнейшие обновления .

0 голосов
/ 30 сентября 2018

Старайтесь не использовать PropertySet properties = (BasePropertySet.FirstClassProperties);, потому что он, скорее всего, вернет поля больше, чем вам нужно.(более 50 объектов)

Попробуйте загрузить те, которые вам нужны.

PropertySet ps = new PropertySet(
                                            ItemSchema.Subject,
                                            ItemSchema.InReplyTo,
                                            ItemSchema.Body,
                                            ItemSchema.DateTimeSent,
                                            ItemSchema.DisplayTo,
                                            ItemSchema.Importance,
                                            EmailMessageSchema.From,
                                            ItemSchema.UniqueBody, 
                                            ItemSchema.MimeContent, 
                                            ItemSchema.HasAttachments, 
                                            ItemSchema.Attachments
                                            );
0 голосов
/ 03 октября 2018

Вы также можете попытаться установить требуемый ServerServerVersion в конструкторе ExchangeService явно на что-то более высокое.Если это касается Office365, имейте в виду, что EWS не получает дальнейшие обновления .

0 голосов
/ 26 сентября 2018

Решил это.Оказывается, это было что-то в определенном электронном письме.

Первоначально код был заказан как: -

PropertySet properties = (BasePropertySet.FirstClassProperties);
service.LoadPropertiesForItems(emails, properties);

foreach (var email in emails)
{
    try {
        <Process Email>
    }
}

Я переупорядочил код как: -

foreach (var email in emails)
{
    try {
        var list = new List<EmailMessage> { email };
        PropertySet properties = (BasePropertySet.FirstClassProperties);
        service.LoadPropertiesForItems(list, properties);
        <Process Email>
    }
} 

Итак, получение свойств индивидуально для каждого письма, а не для всех вместе.Должно быть сделано через List, поскольку это то, что принимает LoadPropertiesForItems.

В этом случае в одном из электронных писем есть что-то (предположительно свойство Hashtags), которое вызывает ошибку.

Теперь всеОстальные электронные письма обрабатываются правильно, а сообщение, вызывающее ошибку, пропускается.

Хотя это раздражает, потому что я не могу получить доступ к свойствам, но на самом деле я не могу записать какую-либо информацию об этом.

...