问题标签 [ews-managed-api]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
587720 浏览

c# - 如何检测此字典键是否存在于 C# 中?

我正在使用带有联系人数据的 Exchange Web 服务托管 API。我有以下代码,它是功能性的,但并不理想:

正如我所说,这段代码有效。现在,如果可能的话,我想让它吸得少一点。

我找不到任何方法允许我在尝试访问它之前检查字典中的键是否存在,如果我尝试读取它(使用.ToString())并且它不存在,则会引发异常:

500
给定的键不在字典中。

我怎样才能重构这段代码以减少吸收(同时仍然有效)?

0 投票
0 回答
1033 浏览

c# - EWS 托管 API:每个套接字地址(协议/网络地址/端口)通常只允许使用一次

我们正在开发允许我们的自定义调度应用程序(主角色)与 Microsoft Exchange Server 2010/2007(从角色)同步的软件。我们的解决方案基于 .NET 4.0、EWS 托管 API 和 Parallel Fx,当然还有我们自己的 C# 代码。我们特别注意了“ExchangeService”类实例不会被多个线程同时使用的事实,并且对于实例总数是保守的(我们目前在任何给定时间都有 10 个活动实例)。然而,我们确实进行了很多调用(FindItems、CreateItems、UpdateItems、DeleteItems、LoadPropertiesForItems)。

深入挖掘,我们发现这种方法并没有给我们带来太多好处。每当发出操作时,都会创建、执行和关闭一个新的 HttpWebRequest。对于经过身份验证的请求(在我们的例子中:https + WebCredentials),似乎底层 tcp 连接以 TIME_WAIT 状态返回到操作系统(如本文所述:msdn.microsoft.com/en-us/library/aa560610( BTS.10).aspx) 并坐在那里,4 分钟内什么都不做(默认情况下)。我们已经应用了上述文章中的建议(进一步的讨论可以在这里找到:blogs.msdn.com/b/dgorti/archive/2005/09/18/470766.aspx),并将“坐在那里”的时间减少到 30秒。在测试环境中这一切都很好,但在 tcp 连接是一种更稀缺的资源并且我们的应用程序不是唯一使用它们的生产系统上就不行了。

我认为问题与 EWS 托管 API 如何使用 HttpWebRequest(甚至在 System.Net 中更深入)有关。我们想玩弄 msdn.microsoft.com/en-us/library/system.net.httpwebrequest.unsafeauthenticatedconnectionsharing.aspx 和 msdn.microsoft.com/en-us/library/6y3d5dts.aspx 但因为 EWS 托管 API 中的所有内容要么是内部的,要么是密封的,因此很难扩展/尝试一下。

欢迎提供如何进行的建议!

0 投票
2 回答
9049 浏览

c# - Exchange Web 服务 - 处理邮件和访问附件

我正在编写一个简单的控制台应用程序来监控特定的交换邮箱,当收到满足特定条件的电子邮件时,该应用程序将下载一个 XML 文件附件,并将电子邮件存档。

我已经连接到 EWS OK,并且已经能够循环浏览任何电子邮件,但是在创建一个可以用来访问附件的 EmailMessage 对象时我正在苦苦挣扎。

在下面的示例代码中,该EmailMessage message = EmailMessage.Bind(...)行执行没有错误,但没有返回有效消息,因此当我访问属性或方法时,我收到错误:“对象引用未设置为对象的实例”。

我是 C# 的新手,更不用说 EWS,所以我很难知道从哪里开始......

代码片段:

我用于访问附件的代码直接来自MSDN,所以我希望它在那里...有什么想法吗?

0 投票
1 回答
3121 浏览

c# - Exchange 401 未经授权

我正在尝试连接到我们的 Exchange 2007 服务器。我已经放置了很多异常处理来捕获任何错误并将它们放入应用程序日志中。首先,我有一个函数可以确保用户可以使用提供的凭据访问交换服务:

如果此函数返回 false,则在应用程序日志中放置一个条目,报告用户登录失败,然后该过程终止。

如果函数成功了,那么在某个地方我们调用这个函数;它获取在接下来的 10 分钟内开始的用户的所有约会:

如您所见,该函数将捕获所有异常并记录它们。显示在日志中的是Request failed. The remote server returned an error: (401) Unauthorized.堆栈跟踪指向该service.FindItems()函数。

所以我有点困惑,可能对交换或网络服务或其他什么了解不够。登录函数返回 true,但稍后授权失败。有什么建议么?

0 投票
2 回答
744 浏览

asp.net - 如何缩小此 ASP.NET ASMX 到 Exchange 2010 托管 API 设置中的故障点?

由于使用 Exchange Web Services 2010 有点荒谬,尤其是从 .NET 以外的任何东西中,我的任务是在 SOAP Web 服务中包装一些功能,作为其他语言与我们的 Exchange 交互的传递环境。

[杂项] <-(SOAP)-> ASP.NET ASMX Web 服务<-(EWS 托管 API)-> Exchange2010

为了不要求用户为每个操作输入密码,我们使用模拟帐户,因此我们只需要我们要修改的帐户的帐户名。

这一切都很好。使用其中一个模拟帐户。模拟帐户与 api 密钥具有 1:1 的关系,以方便审计。我们设置的其他模拟帐户似乎与工作帐户完全相同,但名称和密码不同,但当我们尝试从 EWS 托管 API 使用它们时,我们会收到以下错误:

请求失败。远程服务器返回错误:(401) Unauthorized。

堆栈跟踪:

正如我所说,当使用与某个其他模拟帐户对应的 API 密钥时,同样的代码可以正常工作;如果我将非工作 api 密钥设置为使用工作模拟帐户,则 api 密钥开始工作。

由于一个帐户有效而另一个帐户无效,我认为这意味着问题不在于我的 Web 服务代码,而在于模拟帐户设置或存在于 Web 和 Exchange 服务器之间的某种配置。但如果是服务器之间的配置,我认为这会阻止所有帐户工作。

同时,我认为我们有一些非常称职的交易所管理员,其中至少有两个人查看了模拟账户并得出结论认为他们不是问题所在。

我们可以从这里去哪里?我想一种可能的解决方案是通过工作模拟帐户引导所有请求并处理审计影响,但如果我们可以避免这种情况,我们愿意这样做。有任何想法吗?

0 投票
6 回答
10106 浏览

.net - 使用 Exchange Web 服务 (EWS) 托管 API 为其他用户创建任务

作为“EWS 托管 API 新手”,我在查找有关创建和管理任务的示例和文档时遇到了一些问题。

我已经成功地为自己创建了一个任务,没有任何问题。但是,我真的需要能够做到以下几点 - 如果有人能给我任何指示,我会非常感激......

  1. 创建一个任务并将其分配给另一个用户。
  2. 能够在将任务分配给该用户时询问该任务的状态(完成百分比等)。
  3. 随时更新任务笔记。

提前感谢您的任何指点!

0 投票
3 回答
36840 浏览

exchange-server - 当我尝试通过 EWS 托管 API 读取/更新任务的 .Body 时出错 - “您必须先加载或分配此属性,然后才能读取其值。”

我正在使用 Exchange Web 服务托管 API 来处理任务 (Exchange 2007 SP1)。我可以很好地创建它们。但是,当我尝试进行更新时,它适用于除 .Body 字段之外的所有字段。每当我尝试访问(读取/更新)该字段时,都会出现以下错误:

我正在使用的代码如下所示:

奇怪的是,检查属性包显示该对象包含 33 个属性,但 {Body} 不是其中之一。该属性似乎是从基类 .Item 或其他东西继承的。

那么,我是否需要将对象重新加载为 Item 类型?或者通过 .Bind 或其他方式重新加载它?请记住,我需要对数千个项目执行此操作,因此效率对我来说很重要。

0 投票
1 回答
1852 浏览

exchange-server - Exchange Web 服务(托管 API)与 WebDav 性能问题

我是 Exchange (2007) 开发的新手,所以请多多包涵。:-)。似乎有无数种用于 Exchange 开发的技术——最新的是 Exchange Web 服务——以及相关的托管 API。我需要编写一个程序,如果有必要,可以在 Exchange 服务器上运行,以扫描人们的邮箱,以清除满足各种标准(与本次讨论无关)的邮件。

据我了解,对于 Exchange 2007 和 Exchange 2010,大多数其他技术(WebDav、MAPI、CDO)现在已被弃用。因此,由于这是一个全新的应用程序,我决定使用 Exchange Web 服务托管 API。

我担心每小时可以扫描的项目数量。由于它是基于 Web 服务的,因此涉及到网络跃点。所以我想在与之通信的服务器上运行这个实用程序。 我必须与“集线器”服务器交谈是否正确?. 我正在使用自动发现,无论哪个邮件服务器包含我正在扫描的实际邮件存储,它似乎都解析为“集线器”服务器。

当下拉多个项目时——使用 ExchangeService.FindItems 并指定页面大小为 500——我从我的工作站到集线器服务器的吞吐量非常好。我能够在 47 秒内检索 22,000 封邮件。这似乎是合理的。 然而,事实证明,当以这种方式检索时,并非所有属性都是“绑定”的。某些属性——比如 ToRecipients 和 CcReipients——没有填写。你必须显式绑定它们(单独)——通过调用

这是到服务器的单独往返,这会将吞吐量从大约 460 项/秒降低到 3 项/秒——这是不可行的。

所以 - 其他几个问题。有没有办法在调用 FindItems 期间强制绑定缺少的属性?如果做不到这一点,有没有办法一次绑定多个项目?

最后,对于这类工作,我选择 Exchange Web Services 是否正确。我喜欢编程模型的简单性,如果 (a) 更复杂或 (b) 已弃用,我不想转向另一种技术。如果另一种技术能更好地完成这项工作,并且没有被弃用,那么我会在必要时考虑使用它。感谢您的意见和建议。

0 投票
1 回答
692 浏览

exchange-server - 使用 Exchange Web 服务跨文件夹搜索 Exchange

有没有办法使用 EWS 托管 API 搜索所有文件夹中的所有电子邮件的 Exchange。我正在使用 FindItems API 调用——但这似乎要求将搜索限制在单个文件夹中。

0 投票
1 回答
1969 浏览

exchange-server - 如何使用 Exchange Web 服务发现 Exchange Server 的所有邮箱?

我正在使用 Exchange Web Services Managed API 1.0 来访问我组织中的 Exchange 服务器 (2007)。我需要遍历给定服务器上的所有邮箱。我还没有看到一种方法来获取为给定 Exchange 服务器定义的邮箱列表。我已经能够使用 AutoDiscover 服务来查找特定邮箱的中心服务器的地址,但我对获取所有邮箱的列表感兴趣。有人可以指出我正确的方向吗?