KYO'S BLOG

<< July 2017 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 >>

Microsoft Exchange System Attendant サービス不調・・・

0
    今の開発環境って Windows 2003 の AD 使ってドメイン組んでいるんだけど、都合上 DC で SoftEther を動かして、1 枚 の NIC で IP 二系統使っている。そのせいなのか、先週インストールした Exchange Server がドメインがみつからないとイベントはきまくって、動作しなくなった・・・orz

    仕方ないのでサーバー再起動したら、Microsoft Exchange System Attendant サービスが起動できなくなってしまった。。。

    イベントから調査して、MSKB 906907 で解決したけど、どうも System Attendant サービスが怪しい。今も ID:8331 MSExchangeAL を毎分出力している。

    これも MSKB 837444 で解決したけど、時々とチェックしないと酷い状態になりそう。

    今は WebDAV 使って Exchange との連携部分を開発しているが、動作確認が正しいものなのか不安になる。。。

    Exchange Server | permalink | comments(0) | trackbacks(1)

    WebDAV で予定表を時間指定で検索するとエラーになる〜回答編

    0
      10/21 に書いたネタ「<a href="http://blog.kyotakahashi.com/?eid=268468" target="_blank">WebDAV で予定表を時間指定で検索する</a>」 について原因がわかったので載せておきます。

      元ネタは、次のような WebDAV の SQL Query が要求エラーになるというもの
      SELECT *
      FROM scope('Shallow Traversal of "http://exch2003/public/新宿オフィス/33F/会議室/R3301/"')
      WHERE "urn:schemas:calendar:dtstart" < '2005-10-20 00:00:00'


      原因はというと

      "<" や ">" が開始タグや終了タグになっているようです。

      まず、値の記述を入れ替えて > でのみ比較しましたが NG のようです。

        AND ( CAST("2005-10-30T01:00:00Z" as 'dateTime') >= "urn:schemas:calendar:dtend")

      ちゃんと調べていませんが、ダブルクォーテーションやシングルクォーテーションの位置にも関係あるのかもしれません。
      ('Shallow Traversal of "http://exch2003/public/会議室/R3301/"' を削除すると、IE で XML が表示できたりするので。)


      次に SQL 文を CDATA でくくりましたが NG のようです。
      <D:searchrequest xmlns:D = "DAV:" ><D:sql><![CDATA[
       SELECT *
       FROM  scope('Shallow Traversal of "http://exch2003/public/会議室/R3301/"')
       WHERE ("urn:schemas:calendar:dtstart" >= CAST("2005-10-25T16:00:00Z" as 'dateTime'))
       AND ("urn:schemas:calendar:dtend" <= CAST("2005-10-30T01:00:00Z" as 'dateTime'))
      ]]></D:sql></D:searchrequest>


      仕方ないので、"<" を "&lt;"、">" を "&gt;" で直接記述すると、とりあえず通りました。

      ということで、次のように SQL Query 部分を HtmlEncode することで通るようになりました。
      変更前 : strQuery += query;
      変更後 : strQuery += HttpUtility.HtmlEncode(query);


      っていうか、回答がでるまでは <a href="http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=25637&forum=7&4" target="_blank">@IT の会議室</a> にお世話になってのですが(^^ゞ


      言われてみると、これくらい自分で気付けよ・・・とか思ったりして。
      最近病んでるんですよ・・・きっとw
      Exchange Server | permalink | comments(0) | trackbacks(0)

      PUT リクエスト時に「409 競合」エラー

      0
        Sending a Message (WebDAV)

        このサンプルを ASP.NET + C# で動かすと、GetResponse() で次のエラーが発生する。

        「リモート サーバーがエラーを返しました : (409) 競合」


        PUT メソッド実行時に起こりやすい。Content-Type がポイント?未だ解決せず・・・

        http://www.mars.dti.ne.jp/~torao/rfc/rfc2068-ja.html
        409 Conflict
        リクエストはリソースの現在の状態との矛盾のため完了されなかった。このコードはユーザが矛盾を解決し、リクエストを再提出できる事が期待される状況のみに許される。レスポンスボディはユーザが矛盾したリソースを認識するための十分な情報を含まなければならない。理論的には、このレスポンスエンティティはユーザやユーザエージェントが問題を修正するための十分な情報であろう。しかしながら、それは不可能だろうしその必要もない。

        矛盾は PUT リクエストへのレスポンスにおいてもっとも発生しがちである。もしバージョン処理が使用され、PUT のエンティティが初期の (サードパーティ) リクエストによって作られたそれらと矛盾しているリソースの試行を含んでいるならば、サーバはリクエストが完了できなかった事を示す 409レスポンスを使用するできる。この場合、レスポンスエンティティはContent-Type レスポンスによって定義されるフォーマットで二つのバージョンの違いのリストを含むべきである。

        Exchange Server | permalink | comments(4) | trackbacks(0)

        WebDAV で予定表を時間指定で検索する

        0
          WebDAV で Exchange の予定表を時間範囲指定で検索。
          うまくいかない・・・
          時間以降は OK で、時間以前は NG ・・・ Why?


          SELECT *
          FROM scope('Shallow Traversal of "http://exch2003/public/新宿オフィス/33F/会議室/R3301/"')
          WHERE "urn:schemas:calendar:dtstart" > '2005-10-20 00:00:00'
          はOK

          SELECT *
          FROM scope('Shallow Traversal of "http://exch2003/public/新宿オフィス/33F/会議室/R3301/"')
          WHERE "urn:schemas:calendar:dtstart" < '2005-10-20 00:00:00'
          は要求が不適切というエラーがでる

          Exchange Server | permalink | comments(0) | trackbacks(0)

          ASP.NET から予定表に追加がひとつしかできない

          0
            Creating an Appointment (WebDAV)
            のサンプルを Windows 統合認証でユーザーとパスワードを与えずに行ってみる。
            修正箇所は細かいところはあるけど、次の箇所くらいかな?

            // PROPPATCHRequest.Credentials = MyCredentialCache; これを下のように修正する
            PROPPATCHRequest.Credentials = System.Net.CredentialCache.DefaultCredentials;


            できた!!動いた!
            と思ったら、、、2つめの予定を作ったら最初のが消えてしまう。。。
            なぜ?
            ブラウザを再起動したりするが関係なく一個しか予定が作成できない。
            OWA から作れば問題なし。
            コードを見てみるが uuid が固定で指定されているのでここを修正!
            しかし、直らない。
            あははは・・・疲れたorz

            別の仕事が入ったから、また続きは明日・・・かな・・・


            Exchange Server | permalink | comments(1) | trackbacks(0)

            会議室リソースって何だ?

            0
              会議室リソースの存在自体がよくわからん。どうやって作るの?
              Exchange 2000 Conferencing Server の 2003 とかはなさそうだし、
              Live Communications Server を使えばよいのか?

              Exchange Server | permalink | comments(1) | trackbacks(0)

              ASP.NET から Exchange Mailbox を操作するには?

              0
                「ASP.NET から Exchange の「予定表」にアイテムを追加する」
                ということを考えている。ということで簡単にできるのかなぁ?と調査。


                Virtual Server などを使ってこんな感じの環境をつくる。
                ちなみに先に言っておくと、うまくいってない・・・ので、やり方知りたい人は読まない方が良いかもw

                【環境】
                Exchange Server 環境
                  exch2003.exch.local
                    Win2003 / AD / DNS / Exchange 2003 SE

                開発環境
                  kyopc.domain.local
                    WinXP / VS2005 / Exchange SDK / ADO 2.7 / Exchange 管理ツール
                    / CDOEX (Exchange Server 上の cdoex.dll を持ってきて regsrv32 で登録)


                【調査(途中)】
                ということで下記の KB を見てやってみた・・・

                [HOWTO] Visual C# .NET で Collaboration Data Objects for Exchange 2000 Server Library を使用してオブジェクトのすべてのフィールドを一覧表示する方法


                [HOWTO] Visual C# .NET で Collaboration Data Objects for Exchange 2000 を使用してメッセージを取得する方法


                Visual C# .NET で Collaboration Data Objects for Exchange 2000 ライブラリ を使って、 Outlook の予定表フォルダを作成する方法


                KB に書いてあるように、Exchange Server 上で ASP.NET を実行すれば問題ないが
                開発環境で実行すると Exception 発生・・・

                「System.Runtime.InteropServices.COMException (0x800A0E7A): プロバイダが見つかりません。正しくインストールされていない可能性があります。
                at ADODB.ConnectionClass.Open(String ConnectionString, String UserID, String Password, Int32 Options)」

                ADO で Exchange 用の Provider が使えないためだと思うが、どうしたらよいか・・・
                ADO 管理ツールみたいなのないのかな?明日探してみるか・・・


                途中だが、LDAP を使った下記のサンプルと試している途中。。。

                CDO for Microsoft Exchange 2000

                Exchange SDK 入れたんなら、そっちのサンプル見れば?というのはあるが、英語苦手><
                うーん、明日がんばって読むしかないかなぁ・・・ムニョムニョ


                はるか昔、Outlook VBA で CDO 使ってアドレス帳とか検索したことあるから、C# でも簡単かなぁ?と思ったらプログラミング力はまだまだらしい撃沈
                Exchange Server | permalink | comments(5) | trackbacks(0)