web-dev-qa-db-ja.com

Exchange Webサービス2010の概要

私はSOAP Webサービスを.NetでwebサービスをEWS2010と以前にWebDAVを使用してExchangeに接続していたアプリケーションサーバーとの間のミドルウェアとなるように書くことを任されました。(私が理解しているように、WebDAVはEWS2010で廃止されるため、アプリケーションサーバーは以前のように接続できなくなり、WebDAVなしでEWSに接続することは指数的に難しくなります。理論上、。何よりも簡単でしょ...そうですか?

私の最終目標は、getおよびcreate/updateメールを送信できるようにすることです、カレンダーアイテム、連絡先、および指定したExchangeアカウントのタスクリストアイテム。 (現在、削除する必要はありませんが、十分に簡単であれば、将来の検討のために削除することもあります)。

最初はサンプルコードが渡されましたが、実際には機能しましたが、すぐに古くなっていることに気付きました。使用されるタイプとクラスは 現在のドキュメント のどこにも表示されません。

たとえば、Exchangeサーバーへの接続を作成するために使用された方法は次のとおりです。

ExchangeService svc = new ExchangeService();
svc.Credentials = new WebCredentials(AuthEmailAddress, AuthEmailPassword);
svc.AutodiscoverUrl(AutoDiscoverEmailAddress);

価値があるのは、これがサンプルコードに付属するアセンブリMicrosoft.Exchange.WebServices.dll( "MEWS")を使用していたことです。

これが接続を確立するための現在の標準的な方法ではないことに気づき、それが機能する前に、それを基にしてカレンダー項目を作成するメソッドを追加しようとしました ここからコピー

static void CreateAppointment(ExchangeServiceBinding esb)
{
    // Create the appointment.
    CalendarItemType appointment = new CalendarItemType();

    ...
}

すぐに、ExchangeServiceExchangeServiceBinding( "ESB");の違いに直面しました。そこで、グーグルを開始して、ESB定義を取得してCreateAppointmentメソッドがコンパイルされるようにする方法を理解しました。私は、WSDLからプロキシクラスを生成する方法を説明する このブログ投稿 を見つけました。

残念ながら、これにより、元のアセンブリMicrosoft.Exchange.WebServices.dll(サンプルコードに付属)で定義された型が、新しいEWS.dllアセンブリ(から生成されたコードからコンパイルされた)の型と重複するいくつかの競合が発生しましたExchangeサーバーによって提供されるservices.wsdl)。

事態を悪化させただけのMEWSアセンブリを除外しました。少数のエラーと警告から25のエラーと2,510の警告に進みました。すべての種類のタイプとメソッドが見つかりませんでした。ここで明らかに何かが間違っています。

それで私は狩りに戻りました。サービス参照とWeb参照を追加する手順(つまり VS2008で必要な追加の手順 )を見つけたので、正しい方向に戻っていると思います。

私が試していたすべての以前のアセンブリを削除しました(実際には、現時点では除外されています)。 https://my.exchange-server.com/ews/services.wsdlのサービス参照を追加しました

エラーと警告が1つになりました。

警告:
親要素のコンテンツモデルが空であるため、要素 'transport'に子要素 'extendedProtectionPolicy'を含めることはできません。

これは、サービス参照を追加したときにweb.configに加えられた変更を参照しています。そして私は SOのここでの修正 を見つけました。私は示されているようにそのセクションをコメントアウトしました、そしてそれは警告が消えるようにしたのでそれのために発言してください。

ただし、エラーは簡単に回避できませんでした。

エラー:
タイプまたは名前空間名「ExchangeService」が見つかりませんでした(usingディレクティブまたはアセンブリ参照がありませんか?)

これは、EWS接続を作成するために使用していた各Webメソッドによって呼び出される関数を参照しています。

private ExchangeService getService(String AutoDiscoverEmailAddress, String AuthEmailAddress, String AuthEmailPassword)
{
    ExchangeService svc = new ExchangeService();
    svc.Credentials = new WebCredentials(AuthEmailAddress, AuthEmailPassword);
    svc.AutodiscoverUrl(AutoDiscoverEmailAddress);
    return svc;
}

この関数はサンプルコードのMEWSアセンブリで完全に機能しましたが、ExchangeServiceタイプは使用できなくなりました。 (私が最初にチェックしたのは、ExchangeServiceBindingでもありません。)

この時点では、ドキュメントからの指示に従っていませんので(Exchangeサーバーのservices.wsdlにサービス参照を追加するといわれているドキュメントのどこにも見つかりませんでしたが、それが最善のようです/私がこれまでに得た最も遠いところ)、私は私がブラインドを飛んでいるように感じます。

ExchangeService/ExchangeServiceBindingを置き換える必要があるものは何かを理解し、それを実装してから、そのスイッチの結果として発生したエラーに対処する必要があることを知っています...

しかし、私はそれを行う方法、またはそれを行う方法を探す場所がわかりません。 「ExchangeService」と「ExchangeServiceBinding」をグーグルすると、古いブログ投稿とMSDNに戻るように見えるだけですが、どちらもこれまでのところ非常に役に立ったとは証明されていません。

ExchangeService/ExchangeServiceBindingを何に置き換えればよいですか? EWSで動作するドキュメントがMSDNよりも優れている場所は他にありますか?

24
Adam Tuttle

マネージドEWS APIに移行することをお勧めします。自分ですべてをまとめようとするよりもはるかに使いやすいです。 Exchange 2007 SP1とExchange 2010の両方をサポートしています。使いやすく、問題が解消されると思います。

バージョン1:こちらが Microsoftからダウンロード です。

そして、これが MSDN docs です。

バージョン2の場合(@ruffinに感謝!)

ダウンロード - MSDNドキュメント


質問者によって追加されました:

役立つことが判明した追加リンク:

38
Joe Doyle