Мы используем ADP для информации о сотрудниках.Мне пришлось создать небольшое приложение, которое называлось бы некоторыми веб-службами, которые ADP должен получать информацию о сотрудниках.Приложение является довольно процедурным ... на самом деле не ориентировано на объект.В основном, я обращаюсь к некоторым веб-службам, чтобы получить общую информацию, информацию о работе, статус сотрудника и т. Д.
У меня большая часть этих данных записывается в текстовый файл в виде журнала, чтобы я мог убедиться, что все работает правильно,Наконец-то все получилось, и он отлично работает на моей локальной машине.Думал, я просто скопирую всю структуру на сервер и использую планировщик Windows, чтобы запланировать запуск exe ночью (один раз в день).Когда оно пытается запустить приложение, оно выглядит как умирающее при вызове первого веб-сервиса.Журнал планировщика заданий говорит:
""ADP.job" (ADP.exe)
Started 2/11/2010 2:14:34 PM
"ADP.job" (ADP.exe)
Finished 2/11/2010 2:14:38 PM
Result: The task completed with an exit code of (e0434f4d)."
Итак, я проверил просмотрщик событий, и он говорит следующее:
EventType clr20r3, P1 adp.exe, P2 1.0.0.0, P3 4b745bb9, P4 adp, P5 1.0.0.0, P6 4b745bb9, P7 289, P8 2d, P9 system.io.filenotfoundexception, P10 NIL.
Для получения дополнительной информации см. Центр справки и поддержки по адресу http://go.microsoft.com/fwlink/events.asp.
Я вставил некоторые console.writelines, чтобы увидеть, где он выходит из строя ...
Вот простой пример main:
static void Main(string[] args)
{
OpenTextFile();
Console.WriteLine("About to process employee work information...");
tw.WriteLine("About to process employee work information...");
//work info service
EmpWorkInfo();
}
И внутри файла opentextfile:
public static void OpenTextFile()
{
//used to log data
String sLogName;
Console.WriteLine("Inside of opentextfile");
if (Directory.Exists(logPath))
{
//directory exists
}
else
{
Directory.CreateDirectory(logPath);
}
Console.WriteLine("Inside of opentextfile2");
sLogName = "log_" + DateTime.Today.ToString("MM_dd_yyyy") + ".txt";
tw = new StreamWriter(logPath + sLogName);
}
Я вижу все console.writelines на сервере, но как только он попадает в эту строку из main:
EmpWorkInfo();
То есть, когда проигрывают все адские перерывы (в основном это не так)т работа).EmpWorkInfo () - это просто функция для получения информации о работе из веб-службы (как я уже говорил, это работает локально).
static void EmpWorkInfo()
{
Console.Writeline("THIS NEVER PRINTS!!!");
SQLClass s=null;
// Create the web service proxy client.
GetEmployeeWorkInfoService oService = new GetEmployeeWorkInfoService();
oService.Timeout = Int32.MaxValue;
// Serialize the UsernameToken into XML.
// Create the UsernameToken as defined in the WS-I secure profile.
UsernameToken oUsernameToken = new UsernameToken(USERNAME, SECRET);
System.Xml.XmlElement oSecurityHeaderXml =
oUsernameToken.GetXml(new System.Xml.XmlDocument());
ADP.GetEmployeeWorkInfoWebService.SecurityHeaderType oSecurityHeader = new ADP.GetEmployeeWorkInfoWebService.SecurityHeaderType();
oSecurityHeader.Any = new System.Xml.XmlElement[] { oSecurityHeaderXml };
oService.Security = oSecurityHeader;
GetEmployeeWorkInfoRequestFilter oFilter = new GetEmployeeWorkInfoRequestFilter();
//filter by thyssenkrupp company
oFilter.Companies = new String[] { COMPANY_IDENTIFIER };
GetEmployeeWorkInfoRequest oRequest = new GetEmployeeWorkInfoRequest();
oRequest.Filter = oFilter;
try
{
EmployeeWorkInfoType[] arPersonalInfo = oService.GetEmployeeWorkInfo(oRequest);
try
{
s = new SQLClass();
}
catch (Exception e)
{
throw new System.Exception(e.Message.ToString());
}
for (int i = 0; i < arPersonalInfo.Length; i++)
{
String stID = arPersonalInfo[i].EmployeeKey.Identifier.EmployeeId; //employee number
String stEmailAddress = arPersonalInfo[i].WorkInfo.EmailAddress; //employee email address (work)
String stFax = arPersonalInfo[i].WorkInfo.Fax; //employee fax number
DateTime dtHireDate = arPersonalInfo[i].WorkInfo.OriginalHireDate;
String stPhone = arPersonalInfo[i].WorkInfo.Phone; //employee phone number
String stWireless = arPersonalInfo[i].WorkInfo.Wireless; //employee wireless number
tw.WriteLine("Processing ID:" + stID + " Email Work: " + stEmailAddress + " Fax Work: " + stFax + " Hire Date: " + dtHireDate + " Phone Work: " + stPhone + " Wireless Work: " + stWireless + ".");
Console.WriteLine("Processing ID:" + stID + " Email Work: " + stEmailAddress + " Fax Work: " + stFax + " Hire Date: " + dtHireDate + " Phone Work: " + stPhone + " Wireless Work: " + stWireless + ".");
s.SetSQLCommand("dbo.ADP_uiEmployeeWorkInfo");
s.AddSQLCmdParameter("@EmployeeNumber", System.Data.SqlDbType.VarChar, stID);
s.AddSQLCmdParameter("@EmailAddress", System.Data.SqlDbType.VarChar, stEmailAddress);
s.AddSQLCmdParameter("@Fax", System.Data.SqlDbType.VarChar, stFax);
s.AddSQLCmdParameter("@HireDate", System.Data.SqlDbType.DateTime, dtHireDate);
s.AddSQLCmdParameter("@Telephone", System.Data.SqlDbType.VarChar, stPhone);
s.AddSQLCmdParameter("@Mobile", System.Data.SqlDbType.VarChar, stWireless);
s.SQLExecuteNonQuery();
Console.WriteLine("Processed ID:" + stID + " Email Work: " + stEmailAddress + " Fax Work: " + stFax + " Hire Date: " + dtHireDate + " Phone Work: " + stPhone + " Wireless Work: " + stWireless + ".");
Console.WriteLine(Environment.NewLine);
}
s.CloseSQLDB();
s.Dispose();
}
//catch any exception from adp side.
catch (Exception e)
{
throw new System.Exception(e.Message.ToString());
}
}
Этот код функции не имеет значения (он уродлив, но не позволяет этому беспокоить вас), код работает ...).Моя проблема в том, что я не могу даже добраться до первого console.writeline этой функции.Есть ли что-то особенное, что мне нужно сделать, когда дело доходит до работы с веб-сервисами?
Редактировать
Логический путь определяется как просто статическая строка вне main:
private static string logPath = Environment.CurrentDirectory + "\\log\\";