我想在 P6 Web 服务中使用基于 Cookie 的身份验证,我点击了以下两个链接
- 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
- 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 中创建一个新活动,我按照以下步骤操作。
-
登录系统(创建 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;
}
-
创建活动:我为 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 中调用了正确的 Login() 吗?
- 我应该在第 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(使用前将#替换为@)