【发布时间】:2016-12-21 00:11:13
【问题描述】:
我有一个 Outlook 联系人查找,我想通过单击按钮从我的 Web 应用程序运行。以下代码是我的dll类和方法:
public class AddressLookup
{
public Contact getContact()
{
RDOSession session = new RDOSession();
session.Logon(Type.Missing, Type.Missing, Type.Missing, true, Type.Missing, Type.Missing);
bool loggedOn = session.LoggedOn;
try
{
RDOAddressBook rAddressBook = session.AddressBook;
RDORecipients rContacts = rAddressBook.ShowAddressBook(Title: "Outlook Lookup", OneAddress: true);
RDORecipient rContact = rContacts.GetFirst();
RDOAddressEntry aeContact = rContact.AddressEntry;
return new Contact(aeContact.Name, aeContact.JobTitle, aeContact.CompanyName, aeContact.StreetAddress);
}
catch (Exception)
{
return new Contact("", "", "", "");
}
}
以下代码是我在网络应用程序上单击按钮时运行的:
protected void btnBillHeaderDetailsOutlook_Click(object sender, EventArgs e)
{
AddressLookup al = new AddressLookup();
var contact = al.getContact();
}
第一次打开VS时,整个过程按预期运行,并且contact变量返回正确的数据。这个问题是当我尝试再次单击按钮或再次运行整个 Web 应用程序时,进程超时。
http://localhost:27855/ScriptResource.axd?d= 中第 885 行第 13 列未处理的异常... 0x800a139e - JavaScript 运行时错误:Sys.WebForms.PageRequestManagerTimeoutException:服务器请求超时。
我觉得我错过了一些基本的东西,因为我以前还没有这样做过。非常感谢您的帮助。
当我将它作为 Windows 应用程序运行时,会按预期加载(如果有帮助的话)
【问题讨论】:
-
Outlook 是用 C 或 C++ 编写的(afaik 唯一完全是 .Net/C#/托管代码的办公应用程序是 InfoPath),因此您正在使用一个非托管库,其中包含您需要显式处置的资源of 甚至更容易包装在 Using 语句中,所以尝试... using(RDOSession session.... using(RDOAddressBook rAddressBook...) {
-
@JeremyThompson 谢谢,这些对象似乎没有实现 IDisposable 因为 RDOSession 对象没有可用的 dispose() 方法。
标签: c# asp.net web outlook exchange-server