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

2024-02-06

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

  1. http://docs.oracle.com/cd/E16281_01/Technical_Documentation/Web_Services/ProgrammersGuide/Logging_into_Primavera_Web_Services.htm#dotnetexample 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 http://docs.oracle.com/cd/E16281_01/Technical_Documentation/Web_Services/ProgrammersGuide/whnjs.htm

现在我可以使用基于 cookie 的身份验证登录,但是当我尝试继续下一步时,我感到震惊。

例如。我想在 P6 DB 中创建一个新活动,我按照以下步骤操作。

  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 类使用哪个参考?

提前致谢!


引用活动 Web 服务后,您应该创建一个 AcitvityService 对象并将 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);    

  }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用C#通过P6 Web服务读写P6DB中的数据 的相关文章

  • 如何将这段 javascript 代码重写为 C++11?

    这是我在 Javascript Definitive Guide 中看到的 javascript 闭包代码 我想把它写成C 11 var uniqueID1 function var id 0 return function return
  • 使用 #pragma Once 和 #ifndef 时出现 VS 2010 C++ LNK2005 错误

    1 gt Deck obj error LNK2005 class Card card card 3VCard A already defined in Card obj 1 gt PokerTester obj error LNK2005
  • 什么定义了类型的大小?

    ISO C 标准规定 sizeof char lt sizeof short lt sizeof int lt sizeof long 我在 BIT Linux mint 19 1 上使用 GCC 8 大小为long int is 8 我正
  • Visual Studios 2015 中的“恢复 NuGet 包”没有执行任何操作

    我将解决方案从 SVN 拉入 Visual Studios 2015 代码中的一些 使用 引用出现错误 因此我尝试在右键单击 解决方案 中的解决方案时运行 恢复 NuGet 包 选项探索者 这没有任何作用 我必须手动进入 nuget 管理器
  • 头文件中实现的函数的静态与内联

    我想到的方式inline在 C 中用于链接 作用域 我把它放在同一个篮子里extern and static对于全局对象 通常 对于在头文件中实现的函数 我的首选解决方案是将其设为静态 In Foo h static void foo Do
  • C# 中类似图的实现

    所以我有一个对象 我们称之为 Head 它有一个对象列表 C C1 C2 C3 T T1 T2 和 M M1 M2 并且所有这些都是相互关联的 例如 Head gt C1 C2 C3 T1 T2 M1 M2 T1 gt C1 C2 T2 g
  • 对 ExecuteNonQuery() 的单次调用是原子的

    对 ExecuteNonQuery 的单次调用是否是原子的 或者如果单个 DbCommand 中有多个 sql 语句 那么使用事务是否有意义 请参阅我的示例以进行说明 using var ts new TransactionScope us
  • 我可以将 char 或 DateTime 设置为 null 吗?

    我可以将 null 设置为char数据类型 并且DateTime在 C 中 多谢你们 这是不可能的 它是一个值类型 使用 char myChar null DateTime myDate null 这相当于 Nullable
  • FluentAssertions ShouldNotThrow 无法识别异步方法/Func

    我正在尝试检查异步方法是否抛出具体异常 为此 我使用 MSTEST 和 FluentAssertions 2 0 1 我已经检查过这个关于 Codeplex 的讨论 http fluentassertions codeplex com wo
  • 原子存储抛出错误

    我最近升级到了 C 11 兼容编译器 并且尝试将一些代码从 boost 更新到 c 11 标准 我在使用atomic store转换一些代码时遇到了问题 这是一些简单的测试代码 似乎会引发编译器错误 int main std shared
  • 检测反射 DLL 注入

    在过去的几年中 恶意软件 以及一些渗透测试工具 如 Metasploit 的 meterpreter 负载 已经开始使用反射 DLL 注入 PDF http www harmonysecurity com files HS P005 Ref
  • 列表到优先队列

    我有一个 C 大学编程项目 分为两个部分 在开始第二部分时应该使用priority queues hash tables and BST s 我 至少 在优先级队列方面遇到了麻烦 因为它迫使我自己重做第一部分中已经实现的许多代码 该项目是关
  • linq where 子句和 count 导致 null 异常

    除非 p School SchoolName 结果为 null 否则下面的代码将起作用 在这种情况下 它会导致 NullReferenceException if ExistingUsers Where p gt p StudentID i
  • Windows 上本机 C++ 应用程序中的自动死代码检测?

    背景 我有一个用原生 C 编写的应用程序 花了几年的时间 大约有 60 KLOC 有很多函数和类已经死了 可能有 10 15 就像下面提出的类似的基于 Unix 的问题 我们最近开始对所有新代码进行单元测试 并尽可能将其应用于修改后的代码
  • 在 C# .NET 中对非 ASCII 字符进行编码

    我想向我的应用程序发送的电子邮件添加自定义标头 标头名称只能包含 ASCII 字符 但对于值和用户可能会输入 UTF 8 字符 我必须对它们进行 Base64 编码 此外 我还必须将它们解码回 UTF 8 以便在 UI 中向用户显示它们 最
  • 从具有相同属性的另一个对象创建对象

    我有一个 C 对象 可以说有 20 个属性 它是数据契约的一部分 我还有另一个具有类似属性的业务实体 我想从响应对象中填充该实体 除了将一个对象的每个属性分配给另一个对象的相应属性之外 还有其他方法可以做到这一点吗 是的 看看自动映射器 h
  • 'iter' 的名称查找已更改为新的 ISO 'for' 范围

    我正在尝试编译下面的两个文件 但从编译器收到错误消息 gcc 4 3 3 Linux 错误位于带有以下符号的行 LINE WITH ERROR 我做错了什么 我该怎么改变 路易斯 g c b h b cpp b cpp In functio
  • 如何在控制台程序中获取鼠标位置?

    如何在 Windows 控制台程序中用 C 获取鼠标单击位置 点击时返回鼠标位置的变量 我想用简单的文本命令绘制一个菜单 这样当有人点击时 游戏就会注册它并知道位置 我知道如何做我需要做的一切 除了单击时获取鼠标位置 您需要使用 Conso
  • 为什么 C++ 标准没有将 sizeof(bool) 定义为 1?

    Size of char signed char and unsigned char由 C 标准本身定义为 1 个字节 我想知道为什么它没有定义sizeof bool also C 03 标准 5 3 3 1 说 sizeof char s
  • 在 C# 中使用自定义千位分隔符

    在显示字符串时 我尝试不使用 字符作为千位分隔符 而是使用空格 我想我需要定义一种自定义文化 但我似乎做得不对 有什么指点吗 例如 将 1000000 显示为 1 000 000 而不是 1 000 000 no String Replac

随机推荐