Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用.net访问Windows server的cmd_C#_Asp.net - Fatal编程技术网

C# 使用.net访问Windows server的cmd

C# 使用.net访问Windows server的cmd,c#,asp.net,C#,Asp.net,我在windows服务器上有一些脚本和文件。我希望能够从托管ASP.Net web应用程序的本地服务器在远程服务器上执行脚本 我希望能够显示状态,并能够启动和停止脚本使用一个网络表单上的按钮。我还希望能够通过单击事件从另一个按钮上的web应用程序将文件从远程服务器上的一个位置复制到另一个位置。这可以通过连接到Windows命令提示符来完成 如何使用.Net framework安全地实现这一点?好吧,这一点非常广泛。有几种方法 您可以使用System.Diagnostics从.net framew

我在windows服务器上有一些脚本和文件。我希望能够从托管ASP.Net web应用程序的本地服务器在远程服务器上执行脚本

我希望能够显示状态,并能够启动和停止脚本使用一个网络表单上的按钮。我还希望能够通过单击事件从另一个按钮上的web应用程序将文件从远程服务器上的一个位置复制到另一个位置。这可以通过连接到Windows命令提示符来完成


如何使用.Net framework安全地实现这一点?

好吧,这一点非常广泛。有几种方法

您可以使用System.Diagnostics从.net framework中调用命令提示符,并将适当的参数传递给它。您可以直接从.Net调用脚本文件,这些文件将由操作系统的默认处理程序处理。如果脚本是powershell脚本,则可以使用用于加载脚本的参数调用powershell

如果愿意,您可以使用本机.Net函数来处理文件操作

如果您希望安全地执行此操作,那么创建调用脚本的服务器端函数是相当安全的,只要对这些函数调用的访问受到保护。这取决于您对安全的定义

有关.Net framework的更多信息,请参阅MSDN。在询问stackoverflow之前,文档应该始终是您的第一个调用端口。浏览到Process类

下面是一个简单的例子

在远程服务器上创建并运行wcf web服务,该服务将运行要执行的脚本。在此服务中,定义将定义OperationContract的ServiceContract

Web服务器控件

<asp:Button id="Button1" runat="server"></asp:Button>
远程服务器WCF服务

创建新的WCF服务应用程序项目

向服务项目添加新的服务合同(添加新项目,WCF服务-称之为ExecuteScript)

创建一个新类并将其命名为IExecuteScript

IExecuteScript.cs//定义合同

using System.ServiceModel;
namespace Yourservice
{
   [ServiceContract]
   public interface IExecuteScript
   {
       [OperationContract]
       void Execute();
   }
}
在ASP应用程序中公开端点以供使用

Web.config

在WCF服务项目中,打开web.config并公开ExecuteScript实现的端点

<services>
<service name="Yourservice.ExecuteScript">
  <endpoint address="" contract="Yourservice.IExecuteScript" binding="basicHttpBinding"/>
  <endpoint address="mex" contract="IMetadataExchange" binding="mexHttpBinding"/>
</service>
}

您现在需要一种托管WCF服务的方法。您可以在自己制作的程序、IIS、ASP.Net服务器、Windows服务或其他任何您喜欢的程序中完成。如果服务器不是专用的web服务器,我将使用Windows服务

在具有Web表单的Web应用程序中,添加对远程服务Web服务的引用。大概是

您可以在ASP.Net项目中通过右键单击引用并选择添加服务引用来完成此操作。在单击处理程序中,调用服务。我已经在上面强调了如何做到这一点

这是一个非常粗略的例子,但应该做你想做的


有关更多信息,请访问。您还提到了安全性,WCF服务可以基于授权限制访问。有关更多信息,请参阅MSDN文章。

谢谢Daniel。系统诊断讨论交互系统进程、事件日志和性能计数器,但如何连接到windows server?有关提示,请参阅我的修订答案。我知道这一点,但脚本“yourscriptfile”位于windows server上,按钮位于网站的webform上。所以需要首先使用ip和端口连接到该服务器。我该怎么做?我的问题是,我已经更新了我的答案,提供了一个关于创建WCF服务以实现您想要的目标的粗略指南。谢谢。如果我有疑问,我会问你。有人能想出其他的解决办法吗?WCF有点复杂。。
<services>
<service name="Yourservice.ExecuteScript">
  <endpoint address="" contract="Yourservice.IExecuteScript" binding="basicHttpBinding"/>
  <endpoint address="mex" contract="IMetadataExchange" binding="mexHttpBinding"/>
</service>
public class ExecuteScript: IExecuteScript
{
    public void Execute()
    {
        System.Diagnostics.Process.Start("yourscript");
    }
}