Problems contacting Domain Controller

Asked

Viewed 55 times

0

I made a program that accesses directories on the network. This program uses the windows API WNetAddConnection2. An example of implementing this API is available in C# in the SOEN. Here is the code for reference:

public class NetworkConnection : IDisposable
{
    string _networkName;

    public NetworkConnection(string networkName, 
        NetworkCredential credentials)
    {
        _networkName = networkName;

        var netResource = new NetResource()
        {
            Scope = ResourceScope.GlobalNetwork,
            ResourceType = ResourceType.Disk,
            DisplayType = ResourceDisplaytype.Share,
            RemoteName = networkName
        };

        var userName = string.IsNullOrEmpty(credentials.Domain)
            ? credentials.UserName
            : string.Format(@"{0}\{1}", credentials.Domain, credentials.UserName);

        var result = WNetAddConnection2(
            netResource, 
            credentials.Password,
            userName,
            0);

        if (result != 0)
        {
            throw new Win32Exception(result);
        }   
    }

    ~NetworkConnection()
    {
        Dispose(false);
    }

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    protected virtual void Dispose(bool disposing)
    {
        WNetCancelConnection2(_networkName, 0, true);
    }

    [DllImport("mpr.dll")]
    private static extern int WNetAddConnection2(NetResource netResource, 
        string password, string username, int flags);

    [DllImport("mpr.dll")]
    private static extern int WNetCancelConnection2(string name, int flags,
        bool force);
}

[StructLayout(LayoutKind.Sequential)]
public class NetResource
{
    public ResourceScope Scope;
    public ResourceType ResourceType;
    public ResourceDisplaytype DisplayType;
    public int Usage;
    public string LocalName;
    public string RemoteName;
    public string Comment;
    public string Provider;
}

public enum ResourceScope : int
{
    Connected = 1,
    GlobalNetwork,
    Remembered,
    Recent,
    Context
};

public enum ResourceType : int
{
    Any = 0,
    Disk = 1,
    Print = 2,
    Reserved = 8,
}

public enum ResourceDisplaytype : int
{
    Generic = 0x0,
    Domain = 0x01,
    Server = 0x02,
    Share = 0x03,
    File = 0x04,
    Group = 0x05,
    Network = 0x06,
    Root = 0x07,
    Shareadmin = 0x08,
    Directory = 0x09,
    Tree = 0x0a,
    Ndscontainer = 0x0b
}

Normally this API works smoothly. However between two machines on my network (and so far, only these) the problem System.IO.IOException: The system cannot contact a domain controller to service the authentication request. Please try again later. occurs. What are the reasons that may cause this problem to occur and how can I resolve it?

  • I had trouble with a service when we need to use secure protocol. In my case, I was not exposing the endpoint correctly and consequently the service could not reach the controller. I hope it helps.

  • @Can Andremesquita explain exactly what it is to "expose the endpoint correctly"? What he did?

  • Bruno, at the time I used this how-to to guide me on the configuration of endpoint. HOW-TO.

1 answer

0

I had several problems dealing with network directories and would like to leave a list of recommendations that should be followed if you use the same API I used.

  1. At some point your connection may stop working, if this happens you should close your current connection and open a new one
  2. You may also have problems closing the link, if this happens, try again
  3. Always specify the host name in your credentials

Browser other questions tagged

You are not signed in. Login or sign up in order to post.