none
GetDWSDataメソッドでExceptionがthrowされる RRS feed

  • 質問

  • 前の質問の続きです。

     

    MOSS 2007 + VS 2008でDWS.asmxを使用しようとしています。

    ↓のサンプルを参考に、簡単なテストコードを書いてみたのですが、新たな問題に出会いました...。
    http://msdn.microsoft.com/ja-jp/library/websvcdocumentworkspace.dws.getdwsdata.aspx


    // サンプルコード
    public static string GetDWSData()
    {
            var dwsWS = new dwsWebService.DwsSoapClient();
            var result = String.Empty;
            // ↓指定してもダメ
            // dwsWS.ClientCredentials.Windows.ClientCredential = new NetworkCredential( "user", "pass", "domain" );
            // -----
            try
            {
                    result = dwsWS.GetDwsData( "Shared Documents/", "" );
            }
            catch ( Exception )
            {
                    throw;
            }//try
            // -----
            return result;
    }//GetDWSData


    GetDWSDataメソッドの行でExceptionがthrowされます。エラーメッセージは、
    「この HTTP 要求は、クライアントの認証方式 'Anonymous' では承認されません。サーバーから受信した認証ヘッダーは 'Negotiate,NTLM' でした。」
    という内容です。

    IEのユーザー認証のオプションもいろいろと変更してみたのですが、同じExceptionのままです。

    たびたびすみませんが、原因についてお心当たりはありませんでしょうか?

    2008年7月8日 2:36

回答

  • VS2008で参照設定のコンテキストメニューに表示されるのは、

     

    参照の追加

    サービス参照の追加

     

    の2つでした。VS2008では、「Web参照の追加」ではなく、「サービス参照の追加」が優先されるようです。SharePointのWebサービスは、この「サービス参照の追加」から、「詳細設定」で.NET Framework 2.0互換となる「Web参照の追加」から追加しないといけないようです。

     

    こちらからWeb参照を追加したところ、正常に動作いたしました。

     

    まる1日はまってしまいました><;

     

    kenkenziさん、どうもお騒がせいたしました m( _ _ ) m

     

    VS2008は便利な反面、はまると怖いです。これからVS 2008を使われる方の踏み台になれば...。

     

    2008年7月8日 9:26

すべての返信

  • GX999さん

     

    以下のコードでいかがでしょうか?

    アプリケーション実行ユーザーとWebサービス利用ユーザーが同じか異なるかで

    dwsWS.Credentials のコードを変更してください。

     

     

    // サンプルコード
    public static string GetDWSData()
    {
            dwsWebService.Dws dwsWS = new dwsWebService.Dws();
            var result = String.Empty;

     

            // Webサービス資格情報設定

            //1. アプリ実行ユーザーのアカウントを利用する場合

             dwsWS.Credentials = System.Net.CredentialCache.DefaultCredentials;
            // 2.実行時にユーザーを指定する場合
            // dwsWS.Credentials = new System.Net.NetworkCredential( "user", "pass", "domain" );
            // -----
            try
            {
                    result = dwsWS.GetDwsData( "Shared Documents/", "" );
            }
            catch ( Exception )
            {
                    throw;
            }//try
            // -----
            return result;
    }//GetDWSData

     

    2008年7月8日 3:07
  • kenkenziさん、ご回答ありがとうございます。

     

    最初、不思議に思っていたのです。DwsWebServieを追加できたのですが、その中にDwsという型がなかったのです。で、DwsSorpClientが近い or 代替えなのかなぁ~と思ってコードを書いてみたのです。

     

    他には、DwsSorpインタフェースと、DwsSorpChannelインタフェースがあるだけです。参照かusingが不足しているのでしょうか?

     

     

    2008年7月8日 3:27
  • 少し分かってきました。


    VS2005でWeb参照を追加すると、きちんとpublic partial class DWS...をRefarence.csに生成してくれまして、テストコードの通りに記述することで、正常にデータを取得できました。


    VS2008でWeb参照を追加したときには、DWSクラスを生成してくれません。Web参照を追加するときに、

    ◎ DWS
        +- DwsSoap

    と表示され、生成されるのはDwsSoapインタフェースなのです。

    このため、DwsSoapインタフェースを継承している(と思われる)DwsSoapClientクラスを使用して色々と試していたことになります。Web参照で追加されるプロキシクラスの生成で、VS 2005とVS 2008では大きな違いがあることが分かりました。


    MSさんに問い合わせないとダメかなぁ。

    2008年7月8日 9:09
  • VS2008で参照設定のコンテキストメニューに表示されるのは、

     

    参照の追加

    サービス参照の追加

     

    の2つでした。VS2008では、「Web参照の追加」ではなく、「サービス参照の追加」が優先されるようです。SharePointのWebサービスは、この「サービス参照の追加」から、「詳細設定」で.NET Framework 2.0互換となる「Web参照の追加」から追加しないといけないようです。

     

    こちらからWeb参照を追加したところ、正常に動作いたしました。

     

    まる1日はまってしまいました><;

     

    kenkenziさん、どうもお騒がせいたしました m( _ _ ) m

     

    VS2008は便利な反面、はまると怖いです。これからVS 2008を使われる方の踏み台になれば...。

     

    2008年7月8日 9:26
  • GX999さん

     

    こんにちは。

    解決できたようでよかったですね。

    当方はVS2005だったのでVS2008は参照手順が異なることを知りませんでした。

    今後の参考にさせていただきます。

    2008年7月9日 5:36