У меня есть API C #, размещенный в домене A. Этот API получает файлы в виде данных формы (я извлекаю файл, используя HttpContext.Current.Request.Files).В этом API мне нужно реализовать метод сохранения извлеченного файла в папку или общую папку на удаленном компьютере, который находится в другом домене, скажем, в домене B (домен моей компании).У меня есть учетные данные для доступа к машине, работающей в домене B.
Я использую VS2015 для разработки.Моя целевая среда - .NET 4.5.2.Я пытался использовать метод WNetUseConnection (Mpr.dll) для подключения.Используя этот метод, я могу успешно подключаться и сохранять файлы при подключении из того же домена, что и удаленный компьютер.Но когда я попытался подключиться из-за пределов домена B (домен удаленного компьютера), я не смог этого сделать.Я получаю ошибку 53. Я исследовал эту ошибку и обнаружил, что это «сетевой путь не найден».
Я чувствую, что мне нужна вся помощь, которую я могу получить.Нужно сделать это за 2 дня.
Ниже приведен мой функциональный вызов для подключения к удаленному компьютеру в домене B.
RemoteConnect.connectToRemote("\\xxx.xxx.xxx.xxx\C$", @"domain-B\username", "password");
Ниже приведен код, который у меня есть в моемкласс соединения (RemoteConnect.cs) для использования WNetUseConnection.
[DllImport("Mpr.dll")]
private static extern int WNetUseConnection(
IntPtr hwndOwner,
NETRESOURCE lpNetResource,
string lpPassword,
string lpUserID,
int dwFlags,
string lpAccessName,
string lpBufferSize,
string lpResult
);
[DllImport("Mpr.dll")]
private static extern int WNetCancelConnection2(
string lpName,
int dwFlags,
bool fForce
);
[StructLayout(LayoutKind.Sequential)]
private class NETRESOURCE
{
public int dwScope = 0;
public int dwType = 0;
public int dwDisplayType = 0;
public int dwUsage = 0;
public string lpLocalName = "";
public string lpRemoteName = "";
public string lpComment = "";
public string lpProvider = "";
}
public static string connectToRemote(string remoteUNC, string username, string password)
{
return connectToRemote(remoteUNC, username, password, false);
}
public static string connectToRemote(string remoteUNC, string username, string password, bool promptUser)
{
NETRESOURCE nr = new NETRESOURCE();
nr.dwType = RESOURCETYPE_DISK;
nr.lpRemoteName = remoteUNC;
// nr.lpLocalName = "F:";
int ret;
if (promptUser)
ret = WNetUseConnection(IntPtr.Zero, nr, "", "", CONNECT_INTERACTIVE | CONNECT_PROMPT, null, null, null);
else
ret = WNetUseConnection(IntPtr.Zero, nr, password, username, 0, null, null, null);
if (ret == NO_ERROR) return null;
return getErrorForNumber(ret);
}
public static string disconnectRemote(string remoteUNC)
{
int ret = WNetCancelConnection2(remoteUNC, CONNECT_UPDATE_PROFILE, false);
if (ret == NO_ERROR) return null;
return getErrorForNumber(ret);
}