我想在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/whnjs.htm
现在我可以使用基于cookie的身份验证登录,但当我试图继续下一步时,我被卡住了。
例如,我想在P6DB中创建一个新的活动,我遵循了以下步骤。
-
登录系统(创建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服务,就应该创建一个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侧是否有任何设置