2012-12-13 59 views
0

我想在.net中使用PSI Web服务读取项目列表。我不知道什么是错误的,在请求web方法时,我总是得到“未处理的通信故障发生”异常。来自Microsoft Project Project Server 2010的ReadProjectList

有人可以帮我解决它PLZ。

我使用的Web引用,并用下面的代码使用VS 2010

  1. 增加,(实际用户名和密码发送给) 网络参考网址:服务器/ ProjectServerName/_vti_bin/PSI/project.asmx ?wsdl

    svcProject.Project prj2 = new svcProject.Project(); prj2.Credentials = new NetworkCredential(“testuser”,“testpassword”); svcProject.ProjectDataSet lst2 = prj2.ReadProjectList();

  2. 我试图与WCF参考也与下面码

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

我总是得到“未处理的通讯故障发生”的错误,

一些曾经有助于使在Project Server 2010中的更改用户权限或认证改变

在感谢提前

回答

0

您是否在尝试捕捉soapexception?

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; 
}