SFTPSession entfernt
stattdessen wird ein open command gesendet. Gleichzeitig wird die Ausgabe nicht mehr zum Ende gelesen sondern per Events abgefragt. Die Hoffnung ist hier, dass der Prozess nicht mehr auf dem ReadToEnd() blockiert, wobei das nie bestätigt werden konnte.
This commit is contained in:
parent
0b2893ecde
commit
04907e2104
@ -292,9 +292,7 @@ namespace SendNSWMessageService
|
||||
// external processing for dbh
|
||||
bsmd.dbh.MessageController.SendAndReceive();
|
||||
|
||||
List<MessageCore> coresMarkedForStatusQuery = DBManager.Instance.GetMessageCoresWithNSWStatusFlag();
|
||||
|
||||
foreach (MessageCore core in coresMarkedForStatusQuery)
|
||||
foreach (MessageCore core in DBManager.Instance.GetMessageCoresWithNSWStatusFlag())
|
||||
{
|
||||
core.QueryNSWStatus = false; // reset flag
|
||||
Status aStatus = new Status(core);
|
||||
|
||||
@ -97,7 +97,7 @@ namespace bsmd.dakosy
|
||||
|
||||
}
|
||||
|
||||
public static void TransmitAll(string remoteDir, string localDir, Direction direction, string sessionName)
|
||||
private static Process StartWinSCPProcess()
|
||||
{
|
||||
Process winscp = new Process();
|
||||
winscp.StartInfo.FileName = Properties.Settings.Default.WINSCPFullPath;
|
||||
@ -107,12 +107,24 @@ namespace bsmd.dakosy
|
||||
winscp.StartInfo.RedirectStandardOutput = true;
|
||||
winscp.StartInfo.RedirectStandardError = true;
|
||||
winscp.StartInfo.CreateNoWindow = true;
|
||||
winscp.Start();
|
||||
winscp.EnableRaisingEvents = true;
|
||||
winscp.OutputDataReceived += (s, e) => _log.Debug(e.Data);
|
||||
winscp.ErrorDataReceived += (s, e) => _log.Warn(e.Data);
|
||||
winscp.Start();
|
||||
winscp.BeginErrorReadLine();
|
||||
winscp.BeginOutputReadLine();
|
||||
|
||||
return winscp;
|
||||
}
|
||||
|
||||
public static void TransmitAll(string remoteDir, string localDir, Direction direction, string openCommand)
|
||||
{
|
||||
Process winscp = StartWinSCPProcess();
|
||||
|
||||
// Feed in the scripting commands
|
||||
winscp.StandardInput.WriteLine("option batch abort");
|
||||
winscp.StandardInput.WriteLine("option confirm off");
|
||||
winscp.StandardInput.WriteLine("open " + sessionName);
|
||||
winscp.StandardInput.WriteLine(openCommand);
|
||||
winscp.StandardInput.WriteLine("lcd " + localDir);
|
||||
// winscp.StandardInput.WriteLine("ls");
|
||||
if (remoteDir != null)
|
||||
@ -120,63 +132,30 @@ namespace bsmd.dakosy
|
||||
if(direction == Direction.INCOMING)
|
||||
winscp.StandardInput.WriteLine("get *.xml");
|
||||
if(direction == Direction.OUTGOING)
|
||||
winscp.StandardInput.WriteLine("put *.xml");
|
||||
// move back up since winscp session remembers the last folder
|
||||
winscp.StandardInput.WriteLine("cd ..");
|
||||
winscp.StandardInput.WriteLine("cd ..");
|
||||
winscp.StandardInput.Close();
|
||||
|
||||
// Collect all output
|
||||
string output = winscp.StandardOutput.ReadToEnd();
|
||||
_log.Debug(output);
|
||||
output = winscp.StandardError.ReadToEnd();
|
||||
if(!output.Trim().IsNullOrEmpty())
|
||||
_log.Warn(output);
|
||||
winscp.StandardInput.WriteLine("put *.xml");
|
||||
winscp.StandardInput.Close();
|
||||
|
||||
// Wait until WinSCP finishes
|
||||
winscp.WaitForExit();
|
||||
}
|
||||
|
||||
public static void RemoveProcessedFile(string remoteDir, string filename, string sessionName)
|
||||
public static void RemoveProcessedFile(string remoteDir, string filename, string openCommand)
|
||||
{
|
||||
Process winscp = new Process();
|
||||
winscp.StartInfo.FileName = Properties.Settings.Default.WINSCPFullPath;
|
||||
winscp.StartInfo.Arguments = "/xmllog=\"" + Properties.Settings.Default.SFTPLog + "\"";
|
||||
winscp.StartInfo.UseShellExecute = false;
|
||||
winscp.StartInfo.RedirectStandardInput = true;
|
||||
winscp.StartInfo.RedirectStandardOutput = true;
|
||||
winscp.StartInfo.RedirectStandardError = true;
|
||||
winscp.StartInfo.CreateNoWindow = true;
|
||||
winscp.Start();
|
||||
Process winscp = StartWinSCPProcess();
|
||||
|
||||
// Feed in the scripting commands
|
||||
winscp.StandardInput.WriteLine("option batch abort");
|
||||
winscp.StandardInput.WriteLine("option confirm off");
|
||||
winscp.StandardInput.WriteLine("open " + sessionName);
|
||||
winscp.StandardInput.WriteLine(openCommand);
|
||||
|
||||
// winscp.StandardInput.WriteLine("ls");
|
||||
if (remoteDir != null)
|
||||
winscp.StandardInput.WriteLine("cd " + remoteDir);
|
||||
winscp.StandardInput.WriteLine("rm " + filename);
|
||||
if (remoteDir != null)
|
||||
{
|
||||
// move back up since winscp session remembers the last folder
|
||||
winscp.StandardInput.WriteLine("cd ..");
|
||||
winscp.StandardInput.WriteLine("cd ..");
|
||||
}
|
||||
winscp.StandardInput.Close();
|
||||
|
||||
// Collect all output
|
||||
string output = winscp.StandardOutput.ReadToEnd();
|
||||
_log.Debug(output);
|
||||
output = winscp.StandardError.ReadToEnd();
|
||||
if (!output.Trim().IsNullOrEmpty())
|
||||
_log.Warn(output);
|
||||
winscp.StandardInput.WriteLine("rm " + filename);
|
||||
winscp.StandardInput.Close();
|
||||
|
||||
// Wait until WinSCP finishes
|
||||
winscp.WaitForExit();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -6,7 +6,7 @@ using System;
|
||||
using System.IO;
|
||||
|
||||
using bsmd.database;
|
||||
using System.Linq;
|
||||
|
||||
|
||||
namespace bsmd.dbh
|
||||
{
|
||||
@ -117,7 +117,7 @@ namespace bsmd.dbh
|
||||
public static void SendAndReceive()
|
||||
{
|
||||
// sent unsent messages in output folder
|
||||
bsmd.dakosy.SFtp.TransmitAll(Properties.Settings.Default.RemoteIncomingFolder, Properties.Settings.Default.OutgoingFolder, dakosy.SFtp.Direction.OUTGOING, Properties.Settings.Default.SFTPSessionName);
|
||||
bsmd.dakosy.SFtp.TransmitAll(Properties.Settings.Default.RemoteIncomingFolder, Properties.Settings.Default.OutgoingFolder, dakosy.SFtp.Direction.OUTGOING, Properties.Settings.Default.SFTPOpenCommand);
|
||||
// move files from output folder to archive folder
|
||||
foreach(string sentFile in Directory.GetFiles(Properties.Settings.Default.OutgoingFolder))
|
||||
{
|
||||
@ -130,7 +130,7 @@ namespace bsmd.dbh
|
||||
|
||||
// receive files from remote host
|
||||
// SFTP verbindung öffnen und alle Dateien herunterladen
|
||||
bsmd.dakosy.SFtp.TransmitAll(Properties.Settings.Default.RemoteOutgoingFolder, Properties.Settings.Default.IncomingFolder, dakosy.SFtp.Direction.INCOMING, Properties.Settings.Default.SFTPSessionName);
|
||||
bsmd.dakosy.SFtp.TransmitAll(Properties.Settings.Default.RemoteOutgoingFolder, Properties.Settings.Default.IncomingFolder, dakosy.SFtp.Direction.INCOMING, Properties.Settings.Default.SFTPOpenCommand);
|
||||
|
||||
foreach (string inputFile in Directory.GetFiles(Properties.Settings.Default.IncomingFolder))
|
||||
{
|
||||
@ -151,7 +151,7 @@ namespace bsmd.dbh
|
||||
File.Delete(inputFile);
|
||||
}
|
||||
// remote Dateien löschen
|
||||
bsmd.dakosy.SFtp.RemoveProcessedFile(Properties.Settings.Default.RemoteOutgoingFolder, Path.GetFileName(inputFile), Properties.Settings.Default.SFTPSessionName);
|
||||
bsmd.dakosy.SFtp.RemoveProcessedFile(Properties.Settings.Default.RemoteOutgoingFolder, Path.GetFileName(inputFile), Properties.Settings.Default.SFTPOpenCommand);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
8
bsmd.dbh/Properties/Settings.Designer.cs
generated
8
bsmd.dbh/Properties/Settings.Designer.cs
generated
@ -89,15 +89,17 @@ namespace bsmd.dbh.Properties {
|
||||
[global::System.Configuration.ApplicationScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("dbh")]
|
||||
public string SFTPSessionName {
|
||||
public string SFTPOpenCommand {
|
||||
get {
|
||||
return ((string)(this["SFTPSessionName"]));
|
||||
return ((string)(this["SFTPOpenCommand"]));
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.ApplicationScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("sftp://f-000333@fx.dbh.de/ -hostkey=\"ecdsa-sha2-nistp256 256 453JBU8hAOOQ7wEvmTw5" +
|
||||
"fXsUyZsVCSufyATbGKLh+ak\" -privatekey=\"C:\\work\\Services\\SendNSWMessageService\\dbh" +
|
||||
"\\sshkeynp.ppk\"")]
|
||||
public string IncomingErrorFolder {
|
||||
get {
|
||||
return ((string)(this["IncomingErrorFolder"]));
|
||||
|
||||
@ -23,11 +23,11 @@
|
||||
<Setting Name="RemoteOutgoingFolder" Type="System.String" Scope="Application">
|
||||
<Value Profile="(Default)">test/dbh_2_bsmd</Value>
|
||||
</Setting>
|
||||
<Setting Name="SFTPSessionName" Type="System.String" Scope="Application">
|
||||
<Setting Name="SFTPOpenCommand" Type="System.String" Scope="Application">
|
||||
<Value Profile="(Default)">dbh</Value>
|
||||
</Setting>
|
||||
<Setting Name="IncomingErrorFolder" Type="System.String" Scope="Application">
|
||||
<Value Profile="(Default)" />
|
||||
<Value Profile="(Default)">sftp://f-000333@fx.dbh.de/ -hostkey="ecdsa-sha2-nistp256 256 453JBU8hAOOQ7wEvmTw5fXsUyZsVCSufyATbGKLh+ak" -privatekey="C:\work\Services\SendNSWMessageService\dbh\sshkeynp.ppk"</Value>
|
||||
</Setting>
|
||||
<Setting Name="SenderMaersk" Type="System.String" Scope="Application">
|
||||
<Value Profile="(Default)">00006017</Value>
|
||||
|
||||
@ -778,7 +778,7 @@ namespace bsmd.dbh
|
||||
rootPre.TankerDetails.ConditionCargoBallastTanks = (TankCondition)pre72h.ConditionCargoBallastTanks.Value;
|
||||
if (pre72h.NatureOfCargo != string.Empty)
|
||||
rootPre.TankerDetails.TypeOfCargo = pre72h.NatureOfCargo;
|
||||
bool sendVolume = pre72h.VolumeOfCargo.HasValue && (pre72h.VolumeOfCargo.Value > 0);
|
||||
bool sendVolume = pre72h.VolumeOfCargo > 0;
|
||||
rootPre.TankerDetails.VolumeOfCargo_TNESpecified = sendVolume;
|
||||
if (sendVolume)
|
||||
rootPre.TankerDetails.VolumeOfCargo_TNE = Decimal.Round((decimal)(pre72h.VolumeOfCargo.Value), 3);
|
||||
|
||||
@ -129,7 +129,7 @@ namespace bsmd.dbh
|
||||
case Response.RootType.RESET:
|
||||
if(root.ReportingClassesResetted?.ReportingClass.Length > 0)
|
||||
{
|
||||
_log.InfoFormat("Message {0} RESET confirmed, {1} messages", sentMessage.MessageNotificationClassDisplay, root.Messages.Length); ;
|
||||
_log.InfoFormat("Message {0} RESET confirmed, {1} messages", sentMessage.MessageNotificationClassDisplay, root.Messages.Length);
|
||||
sentMessage.SendSuccess = false; // bestätigter Reset setzt grünen Buppel zurück
|
||||
sentMessage.Status = Message.MessageStatus.ACCEPTED;
|
||||
sentMessage.InternalStatus = Message.BSMDStatus.CONFIRMED;
|
||||
|
||||
@ -28,11 +28,11 @@
|
||||
<setting name="RemoteOutgoingFolder" serializeAs="String">
|
||||
<value>test/dbh_2_bsmd</value>
|
||||
</setting>
|
||||
<setting name="SFTPSessionName" serializeAs="String">
|
||||
<setting name="SFTPOpenCommand" serializeAs="String">
|
||||
<value>dbh</value>
|
||||
</setting>
|
||||
<setting name="IncomingErrorFolder" serializeAs="String">
|
||||
<value />
|
||||
<value>sftp://f-000333@fx.dbh.de/ -hostkey="ecdsa-sha2-nistp256 256 453JBU8hAOOQ7wEvmTw5fXsUyZsVCSufyATbGKLh+ak" -privatekey="C:\work\Services\SendNSWMessageService\dbh\sshkeynp.ppk"</value>
|
||||
</setting>
|
||||
<setting name="SenderMaersk" serializeAs="String">
|
||||
<value>00006017</value>
|
||||
|
||||
157
misc/SendNSWMessageService.exe.config
Normal file
157
misc/SendNSWMessageService.exe.config
Normal file
@ -0,0 +1,157 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<configuration>
|
||||
<configSections>
|
||||
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
|
||||
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<section name="SendNSWMessageService.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
|
||||
<section name="bsmd.dakosy.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
|
||||
<section name="bsmd.dbh.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
|
||||
<section name="bsmd.hisnord.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
|
||||
<section name="bsmd.status.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
|
||||
</sectionGroup>
|
||||
</configSections>
|
||||
<log4net>
|
||||
<root>
|
||||
<level value="INFO" />
|
||||
<appender-ref ref="LogFileAppender" />
|
||||
</root>
|
||||
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" >
|
||||
<param name="File" value="C:\\work\\Logs\\log-NSWMessageServiceTest.txt" />
|
||||
<param name="AppendToFile" value="true" />
|
||||
<rollingStyle value="Size" />
|
||||
<maxSizeRollBackups value="10" />
|
||||
<maximumFileSize value="2MB" />
|
||||
<staticLogFileName value="true" />
|
||||
<layout type="log4net.Layout.PatternLayout">
|
||||
<param name="ConversionPattern" value="%date [%thread] %-5level [%logger] - %message%newline" />
|
||||
</layout>
|
||||
</appender>
|
||||
</log4net>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
|
||||
</startup>
|
||||
<applicationSettings>
|
||||
<bsmd.status.Properties.Settings>
|
||||
<setting name="login" serializeAs="String">
|
||||
<value>BSMD-PROD</value>
|
||||
</setting>
|
||||
<setting name="password" serializeAs="String">
|
||||
<value>t7g7fDP18#7GQw#D</value>
|
||||
</setting>
|
||||
<setting name="url" serializeAs="String">
|
||||
<value>https://www.his-nord.de/HIS-Service/StatusInfoNSW.jsp</value>
|
||||
</setting>
|
||||
</bsmd.status.Properties.Settings>
|
||||
<SendNSWMessageService.Properties.Settings>
|
||||
<setting name="ConnectionString" serializeAs="String">
|
||||
<value>Initial Catalog=nswtest;Data Source=192.168.2.24\SQLEXPRESS;Uid=dfuser;pwd=dfpasswd;Persist Security Info=False;Connection Reset=false</value>
|
||||
</setting>
|
||||
<setting name="SleepSeconds" serializeAs="String">
|
||||
<value>30</value>
|
||||
</setting>
|
||||
</SendNSWMessageService.Properties.Settings>
|
||||
<bsmd.dakosy.Properties.Settings>
|
||||
<setting name="SFTPSessionName" serializeAs="String">
|
||||
<value>dakosy</value>
|
||||
</setting>
|
||||
<setting name="SFTPLog" serializeAs="String">
|
||||
<value>c:\temp\sftp_log.xml</value>
|
||||
</setting>
|
||||
<setting name="SFTPOutDir" serializeAs="String">
|
||||
<value>c:\work\dakosy\out</value>
|
||||
</setting>
|
||||
<setting name="SFTPInDir" serializeAs="String">
|
||||
<value>c:\work\dakosy\in</value>
|
||||
</setting>
|
||||
<setting name="TestMode" serializeAs="String">
|
||||
<value>True</value>
|
||||
</setting>
|
||||
<setting name="WINSCPFullPath" serializeAs="String">
|
||||
<value>c:\work\Tools\WinSCP\WinSCP.com</value>
|
||||
</setting>
|
||||
<setting name="RemoteProdIncomingDir" serializeAs="String">
|
||||
<value>in/prod/ed02</value>
|
||||
</setting>
|
||||
<setting name="RemoteTestIncomingDir" serializeAs="String">
|
||||
<value>in/test/ed02</value>
|
||||
</setting>
|
||||
<setting name="RemoteProdOutgoingDir" serializeAs="String">
|
||||
<value>out/prod</value>
|
||||
</setting>
|
||||
<setting name="RemoteTestOutgoingDir" serializeAs="String">
|
||||
<value>out/test</value>
|
||||
</setting>
|
||||
</bsmd.dakosy.Properties.Settings>
|
||||
<bsmd.dbh.Properties.Settings>
|
||||
<setting name="bsmd_dbh_DBHWebReference_Dbh_Osis_Answ_Ws" serializeAs="String">
|
||||
<value>https://edi-gate.dbh.de/bsmd-soap</value>
|
||||
</setting>
|
||||
<setting name="Sender" serializeAs="String">
|
||||
<value>00003050</value>
|
||||
<!-- Maersk produktiv value>00000768</value-->
|
||||
<!-- BSMD-PROD value>00003050</value-->
|
||||
</setting>
|
||||
<setting name="SenderMaersk" serializeAs="String">
|
||||
<value>00006017</value>
|
||||
</setting>
|
||||
<setting name="OutgoingFolder" serializeAs="String">
|
||||
<value>C:\temp\dbh\out</value>
|
||||
</setting>
|
||||
<setting name="OutgoingArchiveFolder" serializeAs="String">
|
||||
<value>C:\temp\dbh\out_archive</value>
|
||||
</setting>
|
||||
<setting name="IncomingFolder" serializeAs="String">
|
||||
<value>C:\temp\dbh\in</value>
|
||||
</setting>
|
||||
<setting name="IncomingArchiveFolder" serializeAs="String">
|
||||
<value>C:\temp\dbh\in_archive</value>
|
||||
</setting>
|
||||
<setting name="IncomingErrorFolder" serializeAs="String">
|
||||
<value>C:\temp\dbh\in_error</value>
|
||||
</setting>
|
||||
<setting name="RemoteIncomingFolder" serializeAs="String">
|
||||
<value>test/bsmd_2_dbh</value>
|
||||
</setting>
|
||||
<setting name="RemoteOutgoingFolder" serializeAs="String">
|
||||
<value>test/dbh_2_bsmd</value>
|
||||
</setting>
|
||||
<setting name="SFTPOpenCommand" serializeAs="String">
|
||||
<value>open sftp://f-000333@fx.dbh.de/ -hostkey="ecdsa-sha2-nistp256 256 453JBU8hAOOQ7wEvmTw5fXsUyZsVCSufyATbGKLh+ak" -privatekey="C:\git_lager\git_bsmd\bsmd.dbh\misc\sshkeynp.ppk"</value>
|
||||
</setting>
|
||||
</bsmd.dbh.Properties.Settings>
|
||||
<bsmd.hisnord.Properties.Settings>
|
||||
<setting name="TransmitterRoot" serializeAs="String">
|
||||
<value>C:\work\HIS-NORD\Test</value>
|
||||
</setting>
|
||||
<setting name="OutputDir" serializeAs="String">
|
||||
<value>IMP</value>
|
||||
</setting>
|
||||
<setting name="Transmitter" serializeAs="String">
|
||||
<value>client.bat</value>
|
||||
</setting>
|
||||
<setting name="BatchTimeoutMins" serializeAs="String">
|
||||
<value>1</value>
|
||||
</setting>
|
||||
<setting name="ResultDir" serializeAs="String">
|
||||
<value>RESULTS</value>
|
||||
</setting>
|
||||
<setting name="AnswerDir" serializeAs="String">
|
||||
<value>ANSWERS</value>
|
||||
</setting>
|
||||
<setting name="AnswerArchiveDir" serializeAs="String">
|
||||
<value>ANSWERS_DONE</value>
|
||||
</setting>
|
||||
<setting name="AnswerCorruptDir" serializeAs="String">
|
||||
<value>ANSWERS_CORRUPT</value>
|
||||
</setting>
|
||||
</bsmd.hisnord.Properties.Settings>
|
||||
</applicationSettings>
|
||||
<system.web>
|
||||
<webServices>
|
||||
<!-- zum debuggen -->
|
||||
<soapExtensionTypes>
|
||||
<add type="bsmd.database.SoapLoggerExtension, bsmd.database" priority="1" group="0" />
|
||||
</soapExtensionTypes>
|
||||
</webServices>
|
||||
</system.web>
|
||||
</configuration>
|
||||
Loading…
Reference in New Issue
Block a user