【问题标题】:Office365 Exchange Webservice setup in VS2013VS2013 中的 Office 365 Exchange Web 服务设置
【发布时间】:2015-11-11 11:04:35
【问题描述】:

我正在尝试掌握“在 VS2013 中调用 Exchange Webservice”的概念,但到目前为止都失败了。

我获得了一个新的 asmx-address 到我要在 VS2013 中调用的 MS-exchange WS。我要从旧地址更改它。 (工作正常。)到我们旧的内部 Exchange 到这个新的 EWS 云事物。但我不明白我必须做什么才能让它发挥作用。

除了 EWS 网址外,我还获得了密码和用户名。

我还添加了“Microsoft Office 365 API Tools for Visual Studio 2013”​​。

现在,当我想添加我的服务参考时。到我的服务项目。我去“添加|连接的服务”(插件之后的一个新选项)。然后我在 VS 中看到一个对话框,其中只有一个选项“注册您的应用程序”?!?!。那是什么呀?我首先关心的是为什么这个对话框与这个介绍显示的 Using the tool 不同。 ... 什么样的应用程序?!?这不是一个应用程序开始 - 这是一个网络解决方案。这是我在这一步中唯一能做的事情。谁能告诉我这里发生了什么?

我只想:

  1. 将 365Exchange WS (EWS) 添加到我的项目中。
  2. 把它交给我给定的凭据。
  3. 制作一个代理并调用它。

我觉得我必须登录到拥有这些服务的 MS 帐户 - 可能使用我的凭据 - 或其他什么?

我没有登录任何帐户。

谁能告诉我添加 EWS 的步骤。


更准确地说,目前的解决方案使用非 EWS 服务来调用我们的公司 Exchange 服务器。工作正常!现在的问题是我必须更改为 Office365 Exchange 而不是 Office 2010,我认为是。于是我收到了一个网址,还有这套 UN/PSWD。​​p>

我们的解决方案目前使用 WCF 服务,而不是 REST。首先,我的印象是更改 url 然后将 System.Net.NetworkCredential("userID", "password") 凭据交给我的代理就可以了。但是以正常方式设置它是一个巨大的挑战。我去了“添加服务参考...”给它asmx url。这一步还是可以的。首先是说(A):

“服务器需要对您的请求进行身份验证。您的凭据将以明文形式发送到服务器。您要继续吗?”

好吧,很公平。然后它在一个名为“Discovery credential”的对话框中询问用户名/密码(B):

“服务 'https://outlook.office365.com/EWS/Exchange.asmx/$metadata' 需要用户名和密码。”

(在什么地方?)。我用 UN/PSWD 写,它进入了一个永恒的循环 A-B-A-B...

所以我放弃了以这种方式添加服务,并假设我的问题源于我的 VS2013 没有以某种方式更新。然后我添加了 365 API 工具。

我不明白为什么我不能以相同的方式将它添加到解决方案中,就像普通的 IIS 托管 WCF 服务一样。这里有什么特别之处?

关于 Microsoft.Exchange.WebServices。是的,我想使用托管 API(我认为)。我真正想要的是能够创建一个普通的代理实例并为其提供凭据并调用它。

将 asmx 放在 IE 中仍然给我“您已创建服务。”-页面成功,但尝试使用 svcutil.exe 工具失败。由于一些元数据投诉,它拒绝为该服务提供 wsdl。

在某个时候,我在想这是否可行:

https://outlook.office365.com/EWS/Exchange.asmx?user=UN&password=PSWD

如果需要,我可以提供全代码解决方案。将端点、标头信息、用户名、密码、地址、绑定、协议等放在纯 C# 中......但这种方法很烦人,而且可能是徒劳的。

我在芬兰的同事告诉我它工作得很好。但是在丹麦,我无法到达它或其他东西(?)。他在谈论 Active Directory 和 UPN,但我对此了解不多。

非常感谢任何提示。

【问题讨论】:

    标签: office365 exchangewebservices


    【解决方案1】:

    好的... CodeProject 有它 - 解决方案是,全部在代码中:

    [TestMethod]
    public void CallEWS()
    {
        var ws = new ExchangeService(ExchangeVersion.Exchange2013);
        ws.Credentials = new WebCredentials(UN, PSWD);
        try
        {
        ws.AutodiscoverUrl(URL, RedirectionCallback);
        }
        catch(Exception e)
        {
        Console.WriteLine(e.Message);
        }
    
        var message = new EmailMessage(ws);
        message.Subject = "Interesting";
        message.Body = "The proposition has been considered.";
        message.ToRecipients.Add("myself@ourcorp.dk");
        message.SendAndSaveCopy();
    }
    
    public static bool RedirectionCallback(string url)
    {
        // Return true if the URL is an HTTPS URL.
        return url.ToLower().StartsWith("https://");
    }
    

    但 URL 必须是电子邮件。所以 URL = 联合国。

    使用:

    C:\Program Files (x86)\Microsoft\Exchange\Web Services\2.1\Microsoft.Exchange.WebServices.dll
    
    using Microsoft.Exchange.WebServices;
    using Microsoft.Exchange.WebServices.Autodiscover;
    using Microsoft.Exchange.WebServices.Data;
    using Microsoft.Exchange.WebServices.Dns;
    

    (我的第一个 Office365 WS)

    【讨论】:

      【解决方案2】:

      连接服务向导将使用新的 Office 365 REST API,而不是用于 Exchange Web 服务。如果您当前正在使用 EWS,您需要更改的内容取决于您的使用方式。

      您的应用中是否有对Microsoft.Exchange.WebServices 的引用?如果是这样,您使用的是托管 API,并且您可能只需要更改您设置 ExchangeService 对象的 Url 属性的任何位置。

      另一方面,如果您添加了一个服务引用,这会导致 Visual Studio 读取 WSDL 并为您创建代理类(可能会被命名为 ExchangeServicePortTypeExchangeServicePortTypeClient),那么您需要使用他们提供的 ASMX URL 删除旧的服务引用并添加一个新的引用。该过程的一部分将提示您输入用户名和密码以下载 WSDL。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-20
        • 1970-01-01
        • 1970-01-01
        • 2016-06-27
        • 1970-01-01
        • 1970-01-01
        • 2013-04-16
        相关资源
        最近更新 更多