24

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

私の最終的な目標は、指定された Exchange アカウントの電子メール、カレンダー アイテム、連絡先、および To Do リスト アイテムを取得および作成/更新できるようにすることです。(現時点では削除する必要はありませんが、簡単にできる場合は、将来の検討のために組み込む可能性があります)。

私は最初にいくつかのサンプル コードを与えられ、実際に動作しましたが、すぐにそれが古くなっていることに気付きました。使用されている型とクラスは、現在のドキュメントのどこにも記載されていません。

たとえば、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();

    ...
}

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

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

MEWS アセンブリを除外しましたが、これは事態を悪化させるだけでした。ほんの一握りのエラーと警告から、25 個のエラーと 2,510 個の警告になりました。すべての種類とメソッドが見つかりませんでした。ここで何かが明らかに間違っています。

というわけで狩りに戻りました。サービス参照と Web 参照を追加する手順 (つまり、VS2008 で必要な追加の手順) を見つけたので、正しい軌道に戻ったと思います。

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

これで、エラーが 1 つと警告が 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ありますか? MSDN よりも優れた、EWS での作業を文書化した他の場所はありますか?

4

1 に答える 1

38

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

バージョン1:これはMicrosoftからのダウンロードです。

そしてここにMSDNドキュメントがあります。

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

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


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

役立つことが証明された追加のリンク:

于 2010-03-24T03:57:16.923 に答える