我在windows服务器上有几个脚本和文件。我希望能够从承载ASP.Net web应用程序的本地服务器上执行远程服务器上的脚本。
我希望能够显示状态,并能够启动和停止脚本使用一个按钮在一个webform。我还希望能够通过单击事件将文件从一个地方复制到远程服务器上的另一个地方,从我的web应用程序复制到另一个按钮上。这可以通过连接到Windows命令提示符来完成。
如何使用.Net框架安全地做到这一点?
发布于 2015-05-25 07:48:16
嗯,这张很宽。有几种方法。
您可以在.net框架内使用System.Diagnostics调用命令提示符,并传递适当的参数。您可以直接从.Net调用脚本文件,这些文件将由操作系统默认处理程序来处理。如果是powershell脚本,则可以使用加载脚本的参数调用powershell。
如果您愿意,可以使用本机.Net函数来处理文件操作。
您说您希望安全地这样做,那么创建一个调用脚本的服务器端函数是相当安全的,只要对这些函数调用的访问受到保护。这取决于你对安全的定义。
有关.Net框架的更多信息,请参阅MSDN。在询问堆栈溢出之前,文档应该始终是您的第一个访问端口。MSDN - System.Diagnostics浏览到Process类。
下面是一个简单的例子。
在您的远程服务器上创建并运行一个wcf web服务,它将运行您想要执行的脚本。在此服务中,定义将定义ServiceContract的OperationContract。
网络服务器控制
<asp:Button id="Button1" runat="server"></asp:Button>
Click Handler
private void Button1_Click(object sender, System.EventArgs e)
{
//consume your web service here.
ExecuteScript client = new ExecuteScript();
client.Execute();
}
远程服务器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>
实现服务
ExecuteScript.svc.cs
名称空间Yournamespace {
public class ExecuteScript: IExecuteScript
{
public void Execute()
{
System.Diagnostics.Process.Start("yourscript");
}
}
}
您现在需要一种托管WCF服务的方法。您可以在您自己制作的程序中,在IIS中、在ASP.Net服务器上、Windows或其他任何您喜欢的程序中执行此操作。如果服务器不是专用web服务器,则使用Windows服务。
在具有Web表单的web应用程序中,添加对远程服务web服务的引用。就像http://urlOfRemoteServer/ExecuteScript.svc一样
您可以在ASP.Net项目中通过右键单击“引用”并选择“添加服务引用”来做到这一点。在单击处理程序中调用服务。我在上面强调了如何做到这一点。
这是一个非常粗糙的例子,但应该做你想做的事。
有关更多信息,请访问初学者WCF。您还提到了安全性,WCF服务可以限制基于授权的访问。有关更多信息,请参阅这 MSDN文章。
https://stackoverflow.com/questions/30433298
复制相似问题