我写了一个软件,通过webservices验证.客户运行软件的时候访问我虚拟主机上的asmx文件,asmx文件访问虚拟主机上的ACCESS数据库完成验证.我有2个问题不太明白.
1.我想通过外网IP来区分每个客户,怎么在ASMX代码中加入获得外网IP的功能呢?
2.如果有2个客户同时访问WEBSERVICES的时候会不会发生冲突?
------解决方案--------------------
string ipaddress=Request.UserHostAddress;
多少个客户同时访问也不会有冲突
------解决方案--------------------
在局域网内获取本机的外部IP
“ipconfig.exe /all”在局域网中只能获取内部IP, 无法获取本机的外部IP, Dns.Resolve()也一样。
经研究, 在局域网中, 仅凭本机的力量是无法获得本机的外部IP的, 必须登录到外网某个服务器, 那个服务器就知道你的IP, 然后你再取回来。
1using System;
2using System.IO;
3using System.Net;
4using System.Text.RegularExpressions;
5
6class Test
7{
8 // 获取网页的HTML内容
9 static string GetPage(string url)
10 {
11 HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
12 try
13 {
14 using (HttpWebResponse res = (HttpWebResponse)req.GetResponse())
15 {
16 using (StreamReader sr = new StreamReader(res.GetResponseStream()))
17 {
18 return sr.ReadToEnd();
19 }
20 }
21 }
22 catch (System.Exception e)
23 {
24 return e.Message;
25 }
26 finally
27 {
28 req.Abort();
29 }
30 }
31
32 // 通过外部网站得到本机的外部IP
33 static string GetOuterIP()
34 {
35 string patt = @ "IP: \[(? <IP> [0-9\.]*)\] ";
36 string url = "http://www.skyiv.com/info ";
37 return Regex.Match(GetPage(url), patt).Groups[ "IP "].Value;
38 }
39
40 static void Main()
41 {
42 Console.WriteLine( "Inner IP: ");
43 foreach (IPAddress ip in Dns.Resolve(Dns.GetHostName()).AddressList)
44 {
45 Console.WriteLine(ip);
46 }
47 Console.WriteLine();
48 Console.WriteLine( "Outer IP: ");
49 Console.WriteLine(GetOuterIP());
50 }
51}