2

P6 Web サービスで Cookie ベースの認証を使用したいので、以下の 2 つのリンクをたどりました

  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 ベースの認証でログインできるようになりましたが、次のステップに進もうとすると、ショックを受けます。

たとえば。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];
    

問題は 2 番目のステップで発生します。ActivityPortBinding クラスを作成できません。

エラー : 型または名前空間の名前 'ActivityPortBinding' が見つかりませんでした (using ディレクティブまたはアセンブリ参照がありませんか?)

  1. 上記のコードでどこが間違っていたのかを教えてください。
  2. ステップ 1 で正しい Login() を呼び出していますか?
  3. Step2 で ActivityPortBinding クラスにどの参照を使用する必要がありますか?

前もって感謝します!

4

2 に答える 2

0

アクティビティ 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);    

  }
于 2014-10-15T23:47:23.630 に答える