星空5G 导航

怎么用C#创建一个虚拟WEB站点-

2024-09-12编辑:本站
C# 开发的web项目 如何建立一个站点 然后将发布项目~

首先 你得有固定的外网IP地址 以及外网的环境(如果你是局域网 那就需要到路由器做映射),然后把站点发布到让别人访问IP的那台电脑上的IIs 就行了

  C#学习到一定程度会涉及到C#创建WebService的一些高阶知识,本文试图对此做一个简单的介绍。

  假设A是客户端,B是webservice服务端,用户通过http协议向服务器发送soap请求,webservice返回客户端Xml格式的数据。

  现在我们看一看创建一个C#创建WebService的大致过程:

  服务端的webservice是必须要建的。中间的soap,Xml我们不用去关心,在客户端这边,比较重要的是如何从webservice取得对象?答案是用的是proxy对象。客户端由代理对象(proxy)负责与webservice的通信。所以在客户端使用webservice,完全和使用一个本地对象是一样的。

  我们现在以一个简单的C#创建WebService实例来说明。

  打开vs.Net,新建工程(asp.Net web服务),在位置中键入http。//localhost/webserver,其中webserver就是工程的名字。确定后,出现一个Service1.asmx.cx,双击,出现代码窗口,

  using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Web; using System.Web.Services; namespace webserver { /// /// Service1 的摘要说明。 /// (1) public class Service1 : System.Web.Services.WebService { public Service1() { //CODEGEN:该调用是 ASP.Net Web 服务设计器所必需的 InitializeComponent(); } #region Component Designer generated code //Web 服务设计器所必需的 private IContainer components = null; /// /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// private void InitializeComponent() { } /// /// 清理所有正在使用的资源。 /// protected override void Dispose ( bool disposing ) { if(disposing && components != null) { components.Dispose(); } base.Dispose(disposing); } #endregion // WEB 服务示例 // HelloWorld() 示例服务返回字符串 Hello World // 若要生成,请取消注释下列行,然后保存并生成项目 // 若要测试此 Web 服务,请按 F5 键 // [WebMethod] // public string HelloWorld() // { // return "Hello World"; // } } } 下面在(1)处加入

  [WebService(Namespace="http。//localhost/webserver/")]

  这是因为soap是基于http协议上的,客户端无法知道webservice位于那个服务器上。在实际应用中,比如http。//www。ourfly。com上放置这个webservice,则Namespace改为http。//www。ourfly。com/webserver.

  下面我们给这个webservice添加一个方法。

  // [WebMethod] // public string HelloWorld() // { // return "Hello World"; // } 微软帮我们写好了一个,接着添加一个方法。 方法名称叫show. [WebMethod] public string show(string yourname) { return “http。//www。ourfly。com”+”欢迎”+yourname; } 现在,就可以运行了,按F5,点击show,输入你的名字, 然后点击invote 看到了吧。 〈 ?Xml version="1.0" encoding="utf-8" ?〉 〈 string Xmlns="http。//tempuri。org/"〉 http。//www。ourfly。com欢迎yyg〈 /string〉 成功了。打开bin目录,Vs.Net已经将proxy做好了.webserver.dll.

  现在我们在不同的环境下测试:

  1.打开vs.Net,新建”windows应用程序”工程,命名为Client,增加按钮,文本框。

  现在要用到代理了,右键单击右边的reference(引用),选择”添加引用”,选择浏览,找到webserver目录下的bin目录下的webserver.dll
  再加入一个system.web.webservices的引用,在列表中有。

  在form1.cs里,加入

  using System.Web.Services;

  using webserver;

  然后在

  private System.Windows.Forms.Button button1;

  private System.Windows.Forms.TextBox textBox1;

  后面,插入

  private webserver.service1 Client

  建立一个service1的实例。双击按钮,代码如下:

  private void button1_Click (object sender, System.EventArgs e) { Client =new Service1(); string name; name=Client.show("龙卷风.Net"); textBox1.Text=name; } 按F5,运行工程,点击按钮,文本框中显示 http。//www。ourfly。com欢迎龙卷风.Net

  2. Asp.Net web窗口的测试

  方法与上面的一模一样,添加引用,建立service1的实例 在此不在细说。

  3.在VB中测试

  这个就要相对来说复杂一些 ,首先在VB中建立一个”标准EXE”的工程。添加引用:Microsoft Soap Type library。

  注意:如果没有安装Microsoft Soap Toolkit,是没有这个类型库的。

本文实例讲述了C#创建IIS虚拟目录的方法。分享给大家供大家参考。具体分析如下:
DirectoryEntry是.Net给我们的一大礼物,他的名字我们就知道他的功能--目录入口。使用过ADSI的人都知道操作IIS,WinNT这些时,我们还需要提供他们的Path,操作IIS时,这个Path的格式为:

复制代码 代码如下:
IIS://ComputerName/Service/Website/Directory

ComputerName:即操作的服务器的名字,可以是名字也可以是IP,经常用的就是localhost
Service:即操作的服务器,IIS中有Web,也有FTP,还有SMTP这些服务,我们主要是操作IIS的Web功能,因此此处就是"W3SVC",如果是FTP则应是"MSFTPSVC"
WebSite:一个IIS服务中可以包括很多的站点,这个就用于设置操作的站点。他的值是一个数字,默认是1,表示缺省站点,如果有其它,则从1开始依次类推。
Directory:不用说,即操作的目录名称,一个站点一般顶层目录为"ROOT",其它目录则是他的孩子(Child)。
首先我们获取一个站点的顶层目录(根目录):

复制代码 代码如下:
DirectoryEntry rootfolder = new DirectoryEntry("IIS://localhost/W3SVC/1/ROOT");

如果我们创建这个对象是没有发生异常,则表示这个目录是真实存在的。
下面我们来添加新的虚拟目录,比如我们要加的是"Aspcn":
?

1
2
3
4

DirectoryEntry newVirDir = rootfolder.Children.Add("Aspcn","IIsWebVirtualDir");
newVirDir.Invoke("AppCreate",true);
newVirDir.CommitChanges();
rootfolder.CommitChanges();

创建目录的思路很简单,即在根目录的子集(rootfolder.Children)中再添加一条记录,这里使用的是DirectoryEntries类中的Add方法,它返回的是一个DirectoryEntry,表示新加入的目录,第一个参数是虚拟目录的名字,第二个则是Schema的类名以表明我们加入的目录类型。然后再使用DirectoryEntry的Invoke方法,调用ADSI中的"AppCreate"方法将目录真正创建(似乎不走这一步也可以创建目录成功,但是为了保险起见,大家还是用吧),最后便是依次调用新、根目录的CommitChanges方法,确认此次操作。
在创建新目录时,我们也可以同时给这个目录的属性赋值,但是我的实战经验告诉我,最好不要这样做,如果创建时就赋值,将有很多属性不能赋值成功,比如重要的表示真实目录的Path属性。因此飞刀建议大家最好是先创建目录,然后再赋值,即更新目录信息。
更新虚拟目录
相信大家对IIS都比较熟悉,了解IIS中一些重要的设置,如可读(AccessRead)、可写(AccessWrite)、可执行(AccessExecute)等。这些都可通过对DirectoryEntry的Properties属性集合的赋值来实现。赋值可以通过两种方式来完成:
第一种是调用Properties集合的Add方法,如:

复制代码 代码如下:
dir.Properties["AccessRead"].Add(true);

第二种是对第一个索引值赋值:

复制代码 代码如下:
dir.Properties["AccessRead"][0] = true;

这两种方法都是可行的。具体是要看你的喜好了。
在进行赋值之前我们还是要确定要要赋值的目标吧:)这里我们使用DirectoryEntries类的Find方法,如:

复制代码 代码如下:
DirectoryEntry de = rootfolder.Children.Find("Aspcn","IIsVirtualDir");

找到了,我们就可以赋值了。赋值时一定要好好看看啊,虚拟目录的属性值可以超多,一查一大堆。。:(太多了,飞刀我也不重复了,大家去微软的站点上查:)
比较常用的有:
AccessRead,AccessWrite,AccessExecute,AccessScript,DefaultDoc,EnableDefaultDoc,Path

删除虚拟目录
删除虚拟目录的方法也很简单,就是找到你要删除的虚拟目录,然后调用AppDelete方法。
?

1
2
3

DirectoryEntry de = rootfolder.Children.Find("Aspcn","IIsVirtualDir");
de.Invoke("AppDelete",true);
rootfolder.CommitChanges();

还有一种方法,就是调用Root目录的Delete方法。
?

1
2
3
4
5
6

object[] paras = new object[2];
paras[0] = "IIsWebVirtualDir"; //表示操作的是虚拟目录
paras[1] = "Aspcn";
rootfolder.Invoke("Delete",paras);
rootfolder.CommitChanges();
System.DirectoryServices.DirectoryEntries

IIs创建虚拟目录
?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159

using System;
using System.Collections.Generic;
using System.Text;
using System.DirectoryServices;
namespace Install_IIS
{
class IISManager
{
public IISManager()
{
}
/// <summary>
/// 创建虚拟目录
/// </summary>
/// <param name="WebSite">服务器站点名称</param>
/// <param name="VDirName">虚拟目录名称</param>
/// <param name="Path"></param>
/// <param name="RootDir"></param>
/// <param name="chkRead"></param>
/// <param name="chkWrite"></param>
/// <param name="chkExecute"></param>
/// <param name="chkScript"></param>
/// <param name="chkAuth"></param>
/// <param name="webSiteNum">1</param>
/// <param name="serverName">localhost</param>
/// <returns></returns>
public string CreateVDir(string WebSite,string VDirName, string Path, bool RootDir, bool chkRead,bool chkWrite, bool chkExecute, bool chkScript, bool chkAuth, int webSiteNum, string serverName)
{
string sRet=String.Empty;
System.DirectoryServices.DirectoryEntry IISSchema;
System.DirectoryServices.DirectoryEntry IISAdmin;
System.DirectoryServices.DirectoryEntry VDir;
bool IISUnderNT;
//
// 确定IIS版本
//
IISSchema = new System.DirectoryServices.DirectoryEntry("IIS://" + serverName + "/Schema/AppIsolated");
if(IISSchema.Properties["Syntax"].Value.ToString().ToUpper()=="BOOLEAN")
IISUnderNT=true;
else
IISUnderNT=false;
IISSchema.Dispose();
//
// Get the admin object
// 获得管理权限
//
IISAdmin=new System.DirectoryServices.DirectoryEntry("IIS://" +serverName +"/W3SVC/" + webSiteNum + "/Root");

if (IISAdmin == null)
return "IIS 未正常安装";
if (IISAdmin.Children == null)
return "IIS 可能未启动";
//
// If we're not creating a root directory
// 如果我们不能创建一个根目录
//
if (!RootDir)
{
//
// If the virtual directory already exists then delete it
// 如果虚拟目录已经存在则删除
//
foreach(System.DirectoryServices.DirectoryEntry v in IISAdmin.Children)
{
if (v.Name == VDirName)
{
// Delete the specified virtual directory if it already exists
try
{
IISAdmin.Invoke("Delete", new string [] { v.SchemaClassName, VDirName });
IISAdmin.CommitChanges();
}
catch(Exception ex)
{
sRet+=ex.Message;
}
}
}
}
//
// Create the virtual directory
// 创建一个虚拟目录
//
if (!RootDir)
{
VDir = IISAdmin.Children.Add(VDirName, "IIsWebVirtualDir");
}
else
{
VDir = IISAdmin;
}
//
// Make it a web application
// 创建一个web应用
//
VDir.Properties["Path"][0] = Path;
//设置虚拟目录指向的物理路径
if (IISUnderNT)
{
VDir.Invoke("AppCreate", false);
}
else
{
VDir.Invoke("AppCreate", 1);
}
//
// Setup the VDir
// 设置虚拟目录
//
VDir.Properties["AccessRead"][0] = chkRead; //设置读取权限
VDir.Properties["AccessExecute"][0] = chkExecute; //设置执行权限
VDir.Properties["AccessWrite"][0] = chkWrite; //设置写入权限
VDir.Properties["AccessScript"][0] = chkScript; //执行权限
VDir.Properties["DefaultDoc"][0] = "index.asp,Default.aspx";//设置默认文档,多值情况下中间用逗号分割
VDir.Properties["AppFriendlyName"][0] = VDirName; //应用程序名称
VDir.Properties["AuthFlags"][0] = 0; // 设置目录的安全性,0表示不允许匿名访问,1为允许,3为基本身份验证,7为windows继承身份验证
VDir.Properties["AuthNTLM"][0] = chkAuth;
VDir.Properties["EnableDefaultDoc"][0] = true;
VDir.Properties["EnableDirBrowsing"][0] = false;
//
// NT doesn't support this property
// NT格式不支持这特性
//
if (!IISUnderNT)
{
VDir.Properties["AspEnableParentPaths"][0] = true;
}
//
// Set the changes
// 设置改变
//
VDir.CommitChanges();
//下面的方法是得到所有属性名称的方法:
foreach (PropertyValueCollection pvc in VDir.Properties)
{
Console.WriteLine(pvc.PropertyName);
}
sRet+= "VRoot " +VDirName + " created!";
return sRet;
}
#region Properties
public string ServerName
{
get
{
return _serverName;
}
set
{
_serverName = value;
}
}
#endregion
public static string VirDirSchemaName = "IIsWebVirtualDir";
#region Private Members
private string _serverName;
#endregion
}
}

测试用:

复制代码 代码如下:
MessageBox.Show(new IISManager().CreateVDir("localhost", "ietm", "c:\\myweb", false, true, false, false, true, false, 1, "localhost"));

这个我已投入项目中使用,可放心使用。

  • 如何用C语言编写一个简单的程序!
  • 答:01 鼠标左键双击c语言软件,打开,打开后界面如图,点击关闭即可 02 点击上方程序窗口左上角的文件,选择新建 03 在打开的窗口中选择文件,下边一般是第四个 c++Source file,输入文件名(hellw.c),一定要以“.

  • window内自带的C语言编译器怎么用
  • 答:1、首先,输入【#include】。2、然后输入尖括号。3、接下来便可以输入函数库名。4、也可以使用双引号引起来。5、此时,便可以开始使用相应的函数,这样就完成了。注意事项:尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级...

  • c语言怎么用printf输出百位个位?
  • 答:用c语言分别输出个位十位和百位的数字,可以根据下面步骤进行,c语言作为一种程序代码,因此在输入时绝对不能弄错任何符号。include<stdio.h> int main(){int x;scanf("%d",&x);printf("%d的百位=%d,十位=%d,个位=%d\n",x,x/100,x/10%10,x%10);return 0;} ...

  • 如何用c语言比较3个数的大小,该怎么编程?
  • 答:1、首先打开计算机在,在计算机内打开打开vc,然后在vc界面内找到“新建”选项并使用鼠标点击打开。2、选择win32 console application 并在右侧选择工程的名字和地址,确定。3、选择一个空工程并使用鼠标点击勾选,然后点击完成选项。4、再次点击文件-新建选项并使用鼠标点击。5、选择c++ source file 并在...

  • C语言里面,%d%c%f分别是什么意思?怎么用?
  • 答:c是以字符形式输出,只输出一个字符 f是以小数形式输出单、双精度度数,隐含输出6位小数 还有很多,如%s(输出字符串)等等 那么怎么用呢?例如在printf输出数据时 int n=5;printf("%d",n);这样就输出了。printf函数格式字符:C语言中对于不同类型的数据用不同的格式字符。常用的有以下几种格式字符...

  • 51单片机使用T0和T1外部脉冲计数,C语言如何编程?
  • 答:使用T0和T1外部脉冲计数,控制两个电机,到1700个脉冲电机停止,--统计脉冲个数,用外部中断更好。--T0和T1,留着定时用。用四个按键控制,按键1控制电机正转,按键2控制电机反转,按键3控制电机1正转,按键4控制电机2正转,怎么用C语言编程?--编程前,要先设计出来电路。

  • 用C语言怎么做?
  • 答:方法/步骤 1/6分步阅读 想要编写软件首先得要有编写工具,对于初学者来说,一个好的编写工具会能让我们更快的上手,所以编写软件最好是中文版的,我这里使用的是Visual C++ 6.0(完整绿色版)软件,当然也可以用其他版本,只是内容大同小异。首先要在网上下载软件。查看剩余1张图 2/6 软件安装后(...

  • c语言怎么用三角函数
  • 答:cos(x)tan(x)其中的x必须要以弧度为单位。如果以“度”为单位,比如说求30度的正弦值,要用sin(x*180/3.1415926)的形式arcsin(x)arccos(x)arctan(x)arccot(x)以上四个则是相应的反三角函数,函数值的单位也是弧度。若要求arctan(1)的度数,要用以下的形式: arctan(1)*180/3.1415926 ...

  • 判断一个数是奇数还是偶数用C程序怎么编写
  • 答:一个表达式就行了:i % 2。对2求余,如果结果等于1,则i是奇数,如果结果等于0,则i是偶数。if((i%2)==1){ 奇数 } else { 偶数 } 例如:include <stdio.h> main(){ int x;printf("请输入一个整数");scanf("%d",&x);if(x%2==0){ printf("输入的是偶数");} else { printf...

  • 用C语言怎么编写一个从1加到10的程序...新手求解
  • 答:include <stdio.h> void main(){ int n;int sum=0; //初始sum变量值为0;for(n=1;n<=10;n++){ sum=sum+n; //从一加到10;} printf("1+2+...+10=%d",sum);}

    相关内容

    首页 新知 身健
    返回顶部

    © 星空5G w.xkyn.com