#c# #asp.net #file #connection #remote-access
#c# #asp.net #файл #подключение #удаленный доступ
Вопрос:
У меня есть служба окон, которая получает доступ к файлам из общей папки на другом сервере (с именем пользователя и паролем). При первом запуске службы нет проблем с подключением к серверу, но когда он зацикливается или останавливается и запускает службу окон, WNetUseConnection всегда возвращает ошибку: 1231. В чем, по-видимому, проблема?
Ниже приведен вызов соединения:
NetworkShare.ConnectToShare(@\192.168.XX.XXXimages, *username*, *pw*);
NetworkShare.DisconnectFromShare(@\192.168.XX.XXXimages, true);
Ниже приведен код для подключения:
/// <summary>
/// ネットワーク接続クラス
/// </summary>
public class NetworkShare
{
/// <summary>
/// リモート共有に接続します
/// </summary>
/// <returns>成功した場合はnull、それ以外の場合はエラーメッセージ。</returns>
public static string ConnectToShare(string uri, string username, string password)
{
//ネットリソースを作成し、共有に向けます
NETRESOURCE nr = new NETRESOURCE();
nr.dwType = RESOURCETYPE_DISK;
nr.lpRemoteName = uri;
//共有を作成する
int ret = WNetUseConnection(IntPtr.Zero, nr, password, username, 0, null, null, null);
//エラーをチェックする
if (ret == NO_ERROR)
return null;
else
return GetError(ret);
}
/// <summary>
/// キャッシュから共有を削除します。
/// </summary>
/// <returns>成功した場合はnull、それ以外の場合はエラーメッセージ。</returns>
public static string DisconnectFromShare(string uri, bool force)
{
//共有を削除する
int ret = WNetCancelConnection(uri, force);
//エラーをチェックする
if (ret == NO_ERROR)
return null;
else
return GetError(ret);
}
#region P/Invoke Stuff
/// <summary>
/// 共有を作成する
/// </summary>
[DllImport("Mpr.dll")]
private static extern int WNetUseConnection(
IntPtr hwndOwner,
NETRESOURCE lpNetResource,
string lpPassword,
string lpUserID,
int dwFlags,
string lpAccessName,
string lpBufferSize,
string lpResult
);
/// <summary>
/// 共有を削除する
/// </summary>
[DllImport("Mpr.dll")]
private static extern int WNetCancelConnection(
string lpName,
bool fForce
);
/// <summary>
/// ネットリソース
/// </summary>
[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 = "";
}
#region 定数
/// <summary>
/// リソースタイプディスク
/// </summary>
const int RESOURCETYPE_DISK = 0x00000001;
/// <summary>
/// 接続更新プロファイル
/// </summary>
const int CONNECT_UPDATE_PROFILE = 0x00000001;
#endregion
#region エラー
/// <summary>
/// エラーなし
/// </summary>
const int NO_ERROR = 0;
/// <summary>
/// アクセスが拒否されました
/// </summary>
const int ERROR_ACCESS_DENIED = 5;
/// <summary>
/// 割り当て済み
/// </summary>
const int ERROR_ALREADY_ASSIGNED = 85;
/// <summary>
/// 悪いデバイス
/// </summary>
const int ERROR_BAD_DEVICE = 1200;
/// <summary>
/// 不正なネットワーク名
/// </summary>
const int ERROR_BAD_NET_NAME = 67;
/// <summary>
/// 悪いプロバイダー
/// </summary>
const int ERROR_BAD_PROVIDER = 1204;
/// <summary>
/// キャンセル
/// </summary>
const int ERROR_CANCELLED = 1223;
/// <summary>
/// 拡張エラー
/// </summary>
const int ERROR_EXTENDED_ERROR = 1208;
/// <summary>
/// 無効なアドレス
/// </summary>
const int ERROR_INVALID_ADDRESS = 487;
/// <summary>
/// 無効なパラメーター
/// </summary>
const int ERROR_INVALID_PARAMETER = 87;
/// <summary>
/// 無効なパスワード
/// </summary>
const int ERROR_INVALID_PASSWORD = 1216;
/// <summary>
/// より多くのデータ
/// </summary>
const int ERROR_MORE_DATA = 234;
/// <summary>
/// アイテムはありません
/// </summary>
const int ERROR_NO_MORE_ITEMS = 259;
/// <summary>
/// ネットがないか悪いパス
/// </summary>
const int ERROR_NO_NET_OR_BAD_PATH = 1203;
/// <summary>
/// ネットワークなし
/// </summary>
const int ERROR_NO_NETWORK = 1222;
/// <summary>
/// セッション機密の競合
/// </summary>
const int ERROR_SESSION_CREDENTIAL_CONFLICT = 1219;
/// <summary>
/// 悪いプロファイル
/// </summary>
const int ERROR_BAD_PROFILE = 1206;
/// <summary>
/// プロファイルを開けません
/// </summary>
const int ERROR_CANNOT_OPEN_PROFILE = 1205;
/// <summary>
/// 使用中のデバイス
/// </summary>
const int ERROR_DEVICE_IN_USE = 2404;
/// <summary>
/// 接続されていません
/// </summary>
const int ERROR_NOT_CONNECTED = 2250;
/// <summary>
/// エラーファイルを開く
/// </summary>
const int ERROR_OPEN_FILES = 2401;
/// <summary>
/// エラークラス
/// </summary>
private struct ErrorClass
{
public int num;
public string message;
public ErrorClass(int num, string message)
{
this.num = num;
this.message = message;
}
}
/// <summary>
/// エラーメッセージリスト
/// </summary>
private static ErrorClass[] ERROR_LIST = new ErrorClass[] {
new ErrorClass(ERROR_ACCESS_DENIED, "エラー:アクセスが拒否されました"),
new ErrorClass(ERROR_ALREADY_ASSIGNED, "エラー:割り当て済み"),
new ErrorClass(ERROR_BAD_DEVICE, "エラー:不正なデバイス"),
new ErrorClass(ERROR_BAD_NET_NAME, "エラー:不正なネット名"),
new ErrorClass(ERROR_BAD_PROVIDER, "エラー:不正なプロバイダー"),
new ErrorClass(ERROR_CANCELLED, "エラー:キャンセルされました"),
new ErrorClass(ERROR_EXTENDED_ERROR, "エラー:拡張エラー"),
new ErrorClass(ERROR_INVALID_ADDRESS, "エラー:無効なアドレス"),
new ErrorClass(ERROR_INVALID_PARAMETER, "エラー:無効なパラメーター"),
new ErrorClass(ERROR_INVALID_PASSWORD, "エラー:無効なパスワード"),
new ErrorClass(ERROR_MORE_DATA, "エラー:追加データ"),
new ErrorClass(ERROR_NO_MORE_ITEMS, "エラー:これ以上アイテムはありません"),
new ErrorClass(ERROR_NO_NET_OR_BAD_PATH, "エラー:ネットなしまたは不良パス"),
new ErrorClass(ERROR_NO_NETWORK, "エラー:ネットワークなし"),
new ErrorClass(ERROR_BAD_PROFILE, "エラー:不正なプロファイル"),
new ErrorClass(ERROR_CANNOT_OPEN_PROFILE, "エラー:プロファイルを開けません"),
new ErrorClass(ERROR_DEVICE_IN_USE, "エラー:使用中のデバイス"),
new ErrorClass(ERROR_NOT_CONNECTED, "エラー:接続されていません"),
new ErrorClass(ERROR_OPEN_FILES, "エラー:ファイルを開く"),
new ErrorClass(ERROR_SESSION_CREDENTIAL_CONFLICT, "エラー:資格情報の競合"),
};
/// <summary>
/// エラーリストでエラーを取得する
/// </summary>
/// <param name="errNum">エラーコード</param>
/// <returns>エラーメッセージ</returns>
private static string GetError(int errNum)
{
foreach (ErrorClass er in ERROR_LIST)
{
if (er.num == errNum) return er.message;
}
return "エラー:不明, " errNum;
}
Комментарии:
1. Поиск этого кода ошибки » Эта ошибка возникает в результате попытки достичь местоположения в сети, которое недоступно »
2. @MichaelRandall Извините, что это 1312.