直到最近(2018年5月)Windows 10更新,直播还有一段时间。 从共享驱动器工作多年(5+)的我的.NET应用程序开始抛出异常"提供了无效参数"尝试进行任何网络操作时(通过http下载文件或连接到Web服务)。
我搜索了问题,但所有解决方案都是从2012年开始的,它们不再适用了。任何人都知道如何解决它?
PS:我确认问题是共享驱动器(当我将应用程序移动到本地文件夹时没问题)。它与.NET安全性有关
答案 0 :(得分:0)
我找到了两种方法让它再次发挥作用:
这不是一个解决方案,而是一种适合我需要的解决方法。
抛出的异常是:
System.Net.SocketException(0x80004005):提供了无效参数 在System.Net.Sockets.TcpClient..ctor(String hostname,Int32 port)[...]
应用程序中的Authenticate()
方法如下(new TcpClient
构造函数行抛出异常):
public static int Authenticate(string IPAddress, int port, string appInfo, ref string answerStr)
{
var encryptor = new Crypto();
var xClient = new TcpClient(IPAddress, port);
var xStream = xClient.GetStream();
IPHostEntry ipEntry = Dns.GetHostEntry(Environment.MachineName);
IPAddress[] addr = null;
var localIP = "";
addr = ipEntry.AddressList;
foreach (IPAddress xAddr in addr)
{
if ((xAddr.AddressFamily == AddressFamily.InterNetwork))
{
localIP = xAddr.ToString();
break;
}
}
// Send auth request
string authStr = $"{DateTime.Now.ToString()}|{Environment.UserName}|{Environment.UserDomainName}|{Environment.MachineName}|{localIP}|{appInfo}";
byte[] authSocket = encryptor.Crypt(authStr);
Array.Resize(ref authSocket, xClient.SendBufferSize);
xStream.Write(authSocket, 0, authSocket.Length);
// Read auth answer
byte[] answerSocket = new byte[xClient.ReceiveBufferSize];
xStream.Read(answerSocket, 0, answerSocket.Length);
answerStr = encryptor.DeCrypt(answerSocket);
if (!answerStr.ToUpper().StartsWith("Permission denied"))
{
var role = -1;
var roleStr = answerStr.Split('|')[0];
Int32.TryParse(roleStr, out role);
answerStr = answerStr.StripBegin(roleStr + "|");
return role;
}
else
return -1;
}
我希望它有助于解决问题。