NetworkCredential UseDefaultCredentials funktioniert nicht

Wir haben vor langer Zeit einen Code geschrieben, um einen Dienst mit Domänenanmeldeinformationen aufzurufen. Jetzt werden Domänen geändert und es ist geplant, das Standard-Windows-Konto @ zu verwende

So versuche ich, Netzwerkanmeldeinformationen für einen asmx-Webservice über config zurückzusetzen. Ich habe eine SoapExtentsion-Klasse erstellt und versucht, sie zu überschreiben, obwohl sie die Zeile ausführt. Aber es wird nie angewendet und immer der unten stehende Code gewinnt

Aktueller Code

EmployeeService prxy = new EmployeeService();
prxy.Credentials = new System.Net.NetworkCredential("MyAccount", "pwd", "MyDomain");
 //prxy.UseDefaultCredentials = true;// It works but we dont want code change
prxy.GetEmployee(empId);

New Code / Config Nur ändern

Planung über zusätzliche DLL und Konfigurationsänderungen zu injizieren. Daher ist die Änderung des Codes im obigen Originalcode jetzt nicht erforderlich / verboten.

public class WindowsDefCredSoapExtn : SoapExtension
{
    public override object GetInitializer(Type serviceType)
    {
        return "";
    }

    public override object GetInitializer(LogicalMethodInfo methodInfo, SoapExtensionAttribute attribute)
    {
        return "";
    }

    public override void Initialize(object initializer)
    {
        //throw new NotImplementedException();
    }

    public override void ProcessMessage(SoapMessage message)
    {

      if (message is SoapClientMessage)
          {
          if (message.Stage == SoapMessageStage.BeforeSerialize)
              {                             
              ((SoapClientMessage)message).Client.Credentials=null;
              (((SoapClientMessage)message)).Client.UseDefaultCredentials = true;

              }
          }                

        }

    }
}


 <system.web>
    <webServices>
      <soapExtensionTypes>
        <add type="MyAssembly.WindowsDefCredSoapExtn, MyAssembly" priority="1" group="Low"/>
      </soapExtensionTypes>
    </webServices>
  </system.web>

Weiß jemand, wie man die für einen ASMX-Dienst verwendeten Netzwerkanmeldeinformationen über die Konfiguration dynamisch ändert?

AKTUALISIEREN

Während des Debuggens konnte ich feststellen, dass die Netzwerkanmeldeinformationen zurückgesetzt wurden. Aber irgendwie wird es beim Aufrufen der Anfrage an den Server gesendet.

EmployeeService prxy = new EmployeeService();
prxy.Credentials = new System.Net.NetworkCredential("MyAccount", "pwd", "MyDomain");
 //while debug, prxy.UseDefaultCredentials= false here
//My soap extension gets executed and resets credentials.
prxy.GetEmployee(empId);
 //while debug, prxy.UseDefaultCredentials= true here
 //while debug prxy.Credentials are null here. 

Ausgabefenster:

Siehe die letzte Zeile, die AcquireCredentialsHandle durchläuftauthdata. Die Anmeldeinformationen, die in @ festgelegt siprxy.Credentials = new System.Net.NetworkCredential("MyAccount", "pwd", "MyDomain") Wird verwendet, obwohl meine Diensterweiterung zurückgesetzt wurde.

System.Net Verbose: 0 : [11584] WebRequest::Create(http://employee-service/empService.asmx)
System.Net Verbose: 0 : [11584] HttpWebRequest#39256744::HttpWebRequest(http://employee-service/empService.asmx#173042156)
System.Net Information: 0 : [11584] RAS supported: True
System.Net Verbose: 0 : [11584] Exiting HttpWebRequest#39256744::HttpWebRequest() 
System.Net Verbose: 0 : [11584] Exiting WebRequest::Create()    -> HttpWebRequest#39256744
System.Net Verbose: 0 : [11584] HttpWebRequest#39256744::GetRequestStream()
System.Net Information: 0 : [11584] Associating HttpWebRequest#39256744 with ServicePoint#19085264
System.Net Information: 0 : [11584] Associating Connection#65246235 with HttpWebRequest#39256744
System.Net.Sockets Verbose: 0 : [11584] Socket#27993665::Socket(InterNetwork#2)
System.Net.Sockets Verbose: 0 : [11584] Exiting Socket#27993665::Socket() 
System.Net.Sockets Verbose: 0 : [11584] Socket#27993665::Connect(45:80#763949146)
System.Net.Sockets Information: 0 : [11584] Socket#27993665 - Created connection from 10.234.80.99:48954 to 10.242.137.45:80
System.Net Information: 0 : [11584] HttpWebRequest#39256744 - Request: POST /empService.asmx HTTP/1.1

System.Net.Sockets Verbose: 0 : [11584] Socket#27993665::Send()
System.Net.Sockets Verbose: 0 : [11584] Data from Socket#27993665::Send
System.Net.Sockets Verbose: 0 : [11584] <<POST /empService.asmx HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 4.0.30319.2034)

System.Net.Sockets Verbose: 0 : [11584] Exiting Socket#27993665::Send()     -> 512#512
System.Net Information: 0 : [11584] ConnectStream#50996063 - Sending headers
{
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 4.0.30319.2034)
VsDebuggerCausalityData: uIDPo3GOBVodvqZLgUWyCSNWI5kAAAAAzHBQpKvNJ0SvKGwy+a3tGerbsJdijWdHqs2PJipnfqYACQAA
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://employee-service/GetProperties"
Host: employee-service
Content-Length: 507
Expect: 100-continue
Connection: Keep-Alive
}.
System.Net.Sockets Verbose: 0 : [11584] Socket#27993665::Receive()
System.Net.Sockets Verbose: 0 : [11584] Data from Socket#27993665::Receive
System.Net.Sockets Verbose: 0 : [11584] <<HTTP/1.1 401 Unauthorized
Content-Length: 0
WWW-Authenticate: NTLM
Date: Fri, 08 Jul 2016 16:11:15 GMT

>>
System.Net.Sockets Verbose: 0 : [11584] Exiting Socket#27993665::Receive()  -> 109#109
System.Net Information: 0 : [11584] Connection#65246235 - Received status line: Version=1.1, StatusCode=401, StatusDescription=Unauthorized.
System.Net Information: 0 : [11584] Connection#65246235 - Received headers
{
Content-Length: 0
Date: Fri, 08 Jul 2016 16:11:15 GMT
WWW-Authenticate: NTLM
}.
System.Net Information: 0 : [11584] ConnectStream#7794715::ConnectStream(Buffered 0 bytes.)
System.Net.Sockets Verbose: 0 : [11584] Socket#27993665::MultipleSend()
System.Net.Sockets Verbose: 0 : [11584] Exiting Socket#27993665::MultipleSend() 
System.Net Verbose: 0 : [11584] Data from ConnectStream#50996063::ResubmitWrite

System.Net Information: 0 : [11584] Associating HttpWebRequest#39256744 with ConnectStream#7794715
System.Net Information: 0 : [11584] Associating HttpWebRequest#39256744 with HttpWebResponse#29471296
System.Net Information: 0 : [11584] Enumerating security packages:
System.Net Information: 0 : [11584]     Negotiate
System.Net Information: 0 : [11584]     Kerberos
System.Net Information: 0 : [11584]     NTLM
System.Net Information: 0 : [11584]     Microsoft Unified Security Protocol Provider
System.Net Information: 0 : [11584]     Schannel
System.Net Information: 0 : [11584]     WDigest
System.Net Information: 0 : [11584]     DPA
System.Net Information: 0 : [11584]     Digest
System.Net Information: 0 : [11584]     MSN
System.Net Information: 0 : [11584] AcquireCredentialsHandle(package  = NTLM, intent   = Outbound, authdata = MyDomain\MyAccount)

UPDATE 2

Ich habe gerade einen Code zum Testen geändert und unten ist der Unterschied in der Socket-Kommunikation.

AcquireDefaultCredential(package = NTLM, intent  = Outbound) 

Vs

AcquireCredentialsHandle(package  = NTLM, intent   = Outbound, authdata = MyDomain\MyAccount)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage