加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在IIS中调用PostgreSQL组件失败的解决办法(在IIS中调试c#程序,

发布时间:2020-12-13 16:39:54 所属栏目:百科 来源:网络整理
导读:我在在cmd、C#中使用命令为PostgreSQL创建数据库、登录角色,并对数据库进行备份和恢复中写出了postgresql的备份恢复的具体方法,但是,当代码从visual studio中发布并部署到IIS上后,不论是备份还是恢复,都不能运行了。 首先,写出备份的代码: using Syst

  我在在cmd、C#中使用命令为PostgreSQL创建数据库、登录角色,并对数据库进行备份和恢复中写出了postgresql的备份恢复的具体方法,但是,当代码从visual studio中发布并部署到IIS上后,不论是备份还是恢复,都不能运行了。
  首先,写出备份的代码:

using System.Diagnostics;  //一定要引用这个命名空间
                private static string result_success = "";
                private static string result_error = "";

                //备份数据库
                string argbackup = @"--host=localhost --port=5432 --username=admin -w --format=c --blobs --verbose --file=D:/abc abc";
                ProcessStartInfo backupProcess = new ProcessStartInfo();
                backupProcess.FileName = @"C:Program FilesPostgreSQL9.5binpg_dump.exe";
                backupProcess.Arguments = argbackup;
                backupProcess.UseShellExecute = false;
                backupProcess.RedirectStandardInput = true;
                backupProcess.RedirectStandardOutput = true;
                backupProcess.RedirectStandardError = true;
                backupProcess.CreateNoWindow = true;
                try
                {
                    Process process = Process.Start(backupProcess);
                    //在cmd中输出的成功的内容,重定向到result_success中
                    process.OutputDataReceived += (s,_e) => result_success += _e.Data;
                    //在cmd中输出的成功的内容,重定向到result_error中
                    process.ErrorDataReceived += (s,_e) => result_error += _e.Data;
                    //当EnableRaisingEvents为true,进程退出时Process会调用下面的委托函数
                    process.Exited += (s,_e) => Console.WriteLine("Exited with " + process.ExitCode);
                    process.EnableRaisingEvents = true;
                    process.BeginOutputReadLine();
                    process.BeginErrorReadLine();
                    process.WaitForExit();
                    process.Close();
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }

  在上面的代码中,增加了在IIS中将Process类在cmd中的输出内容输出到程序中的代码,但是,不知道postgresql的输出内容是怎么判断的,输出成功和失败的话都输出到error里了。
  具体的可以看 .net Process类 输入输出重定向方法记录、Process.StandardOutput使用注意事项、C#输入输出重定向。   在IIS中选择部署好的C#工程,点击浏览网站,然后打开对应的C#程序,在菜单栏中点击调试——附加到进程,选择w3wp.exe,然后点击附加即可。如果有多个w3wp,只有一个一个试了,但类型应该是托管,可以在程序里打个断点,点了附加后,如果显示不能命中断点则说明不是这个进程。   在result_error处打断点可以看到输出的错误是没有输入密码。但是由于我没有找到在c#中向cmd中再次输入字符的方法,因此只能寻找不输入的方法,那么,就只有修改postgresql的权限,使用户可以不用输入密码就操作数据库。   我使用管理员登录IIS,网络为IPv6,则修改配置文件pg_hba.conf,将 IPv6 local connections的md5改为trust即可。如果是其他用户或网络,则修改相应的md5为trust。   

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读