如何使用C#通过P6 Web服务在P6DB中读写数据

本文关键字:P6DB 读写 数据 服务 Web 何使用 通过 P6 | 更新日期: 2023-09-27 18:12:23

我想在P6 web服务中使用基于Cookie的身份验证,我遵循了以下两个链接

  1. http://docs.oracle.com/cd/E16281_01/Technical_Documentation/Web_Services/ProgrammersGuide/Logging_into_Primavera_Web_Services.htm#dotnetexample
  2. http://docs.oracle.com/cd/E16281_01/Technical_Documentation/Web_Services/ProgrammersGuide/whnjs.htm

现在我可以使用基于cookie的身份验证登录,但当我试图继续下一步时,我被卡住了。

例如,我想在P6DB中创建一个新的活动,我遵循了以下步骤。

  1. 登录系统(创建Cookie容器(:我为AuthenticationService.wsdl 添加了服务参考

    System.Net.CookieContainer cookieContainer;
    public void Login(String userName, String password)
    {
        AuthenticationServiceWebRef.AuthenticationService authService = new  AuthenticationServiceWebRef.AuthenticationService();
        authService.CookieContainer = new System.Net.CookieContainer();
        authService.Url = ConfigurationManager.AppSettings["WSAuthenticationService"];
        AuthenticationServiceWebRef.Login loginObj = new AuthenticationServiceWebRef.Login();
        loginObj.UserName = userName;
        loginObj.Password = password;
        loginObj.DatabaseInstanceId = 1;
        loginObj.DatabaseInstanceIdSpecified = true;
        AuthenticationServiceWebRef.LoginResponse loginReturn = authService.Login(loginObj);
        cookieContainer = authService.CookieContainer;
    }
    
  2. 创建活动:我为ActivityService添加服务引用?wsdl

            Login(WSUsername, WSPassword);
            ActivityPortBinding apb = new ActivityPortBinding();
            apb.CookieContainer = cookieContainer;
            apb.Url = ConfigurationManager.AppSettings["WSGetDataByID"];
            Activity[] acts;
            acts = new Activity[1];
            Activity activity = null;
            for (int i = 0; i < 1; i++)
            {
                activity = new Activity();
                activity.ProjectObjectId = iProjectObjectID;
                activity.ProjectObjectIdSpecified = true;
                activity.Id = "P6 Test" + (i + 1);
                activity.Name = "P6 Test" + (i + 1);
                acts[i] = activity;
            }
            int [] arrayObjectIDs= apb.CreateActivities(acts);
            iRetActivityObjectID = arrayObjectIDs[0];
    

问题出现在第二步,我无法创建ActivityPortBinding类。

错误:找不到类型或命名空间名称"ActivityPortBinding"(是否缺少using指令或程序集引用?(

  1. 你能帮我找出上面代码中的错误吗
  2. 我是否在步骤1中调用了正确的Login((
  3. 在步骤2中,我应该使用对ActivityPortBinding类的哪个引用

提前感谢!

如何使用C#通过P6 Web服务在P6DB中读写数据

一旦引用了活动web服务,就应该创建一个AcitcityService对象,并将cookiecontainer分配给ActivityService对象。假设活动服务的web服务文件夹名为ActivityWS,身份验证服务名为AuthenWS ,则如下所示

    static System.Net.CookieContainer cookieContainer;
    static void Main(string[] args)
    {
        AuthenWS.AuthenticationService authService = new AuthenWS.AuthenticationService();
        authService.CookieContainer = new System.Net.CookieContainer();

        AuthenWS.Login loginObj = new AuthenWS.Login();
        loginObj.UserName = "xxx";
        loginObj.Password = "yyy*";
        loginObj.DatabaseInstanceId = 1;
        loginObj.DatabaseInstanceIdSpecified = true;
        AuthenWS.LoginResponse loginReturn = authService.Login(loginObj);
        if (loginReturn.Return == true) cookieContainer = authService.CookieContainer;
        else {
            Console.WriteLine ("login failed");
            return;
        }
        ActivityWS.ActivityService acService = new ActivityWS.ActivityService;
        acService.CookieContainer = cookieContainer;
        ActivityWS.Activity [] acts;
        acts = new ActivityWS.Activity[1];
        ActivityWS.Activity activity = null;
        for (int i = 0; i < 10; i++)
       {
        activity = new ActivityWS.Activity();
        activity.ProjectObjectId = iProjectObjectID;
        activity.ProjectObjectIdSpecified = true;
        activity.Id = "P6 Test" + (i + 1);
        activity.Name = "P6 Test" + (i + 1);
        acts[i] = activity;
       }
      acService.CreateActivities(acts);    
  }
act1.ReadActivities(act)

这行代码给出的是null或数组长度为零。已经加载了数据P6。P6侧是否有任何设置