0

.net で PSI Web サービスを使用するプロジェクトのリストを読みたかったのです。何が問題なのかわかりません。Web メソッドを要求しているときに、常に「未処理の通信障害が発生しました」という例外が発生します。

誰かがそれを修正するのを手伝ってくれますか.

私はVS 2010を使用しています

  1. Web 参照を使用して追加し、以下のコードを使用しました (実際のユーザー名とパスワードが示されています) Web 参照 URL: servername/ProjectServerName/_vti_bin/PSI/project.asmx?wsdl

    svcProject.Project prj2 = 新しい svcProject.Project(); prj2.Credentials = new NetworkCredential("testuser", "testpassword"); svcProject.ProjectDataSet lst2 = prj2.ReadProjectList();

  2. 以下のコードでもWCFリファレンスを試してみました

    ProjectSoapClient.ProjectSoapClient prj = new ProjectSoapClient.ProjectSoapClient(); prj.ClientCredentials.Windows.ClientCredential = new NetworkCredential("testuser", "testpassword", "SDP"); prj.ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation; ProjectDataSet lst = prj.ReadProjectList();

「未処理の通信障害が発生しました」というエラーが常に表示されますが、

Project Server 2010 でユーザーのアクセス許可または認証の変更を変更するのに役立つことがあります。

前もって感謝します

4

1 に答える 1

0

soapexception の try catch を実行していますか?

    catch (SoapException ex)
    {

        PSLib.PSClientError error = new PSLib.PSClientError(ex);
        PSLib.PSErrorInfo[] errors = error.GetAllErrors();
        PSLib.PSErrorInfo thisError;
        for (int i = 0; i < errors.Length; i++)
        {
            thisError = errors[i];
        }
        string StrException = ex.ToString() + " \r\nInner Exception: " + ex.InnerException.ToString();

    }

なりすましではなく、認証のために login.asmx サービスを試しましたか

 //Creating a new service client object
   ProjectDerived projectSvc = new ProjectDerived();
   projectSvc.Url = projectServerUrl + "Project.asmx";
   projectSvc.Credentials = CredentialCache.DefaultCredentials;
   projectSvc.CookieContainer = GetLogonCookie();
   projectSvc.EnforceWindowsAuth = isWindowsUser;


// Get a CookieContainer property from the derived LoginWindows object.
private static CookieContainer GetLogonCookie()
{
    // Create an instance of the loginWindows object.
    LoginWindowsDerived loginWindows = new LoginWindowsDerived();
    loginWindows.EnforceWindowsAuth = true;
    loginWindows.Url = projectServerUrl + "LoginWindows.asmx";
    loginWindows.Credentials = CredentialCache.DefaultCredentials;

    loginWindows.CookieContainer = new CookieContainer();


    if (!loginWindows.Login())
    {
        // Login failed; throw an exception.
        throw new UnauthorizedAccessException("Login failed.");
    }
    return loginWindows.CookieContainer;
}
于 2013-08-01T16:39:17.233 に答える