2016-07-13 3 views
8

Мы давно написали код, чтобы вызвать службу с учетными данными домена. Теперь изменения доменов и планирование использования учетной записи Windows по умолчаниюNetworkCredential UseDefaultCredentials не работает

Итак, я пытаюсь сбросить сетевые учетные данные для asmx webservice через конфигурацию. Я создал класс SoapExtentsion и пытаюсь переопределить его, даже если он выполняет линию. Но она никогда не будет применяться и всегда ниже существующего кода выиграть

Фактический код

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); 

Новый код/​​Config Измените только

планирования вводить с помощью дополнительных DLL и конфигурационных изменений. Таким образом, изменение кода в оригинальном коде выше не требуется/запрещено в настоящее время

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> 

Любой знает, как динамически изменять сетевые учетные данные, используемые для службы ASMX через конфиг?

UPDATE:

Хотя отладки, я мог видеть сеть учетные данные сбрасываются. Но почему-то он отправляет сервер при вызове запроса.

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. 

Окно вывода:

Смотрите последнюю строку AcquireCredentialsHandle проходит authdata. Учетные данные, которые устанавливаются в prxy.Credentials = new System.Net.NetworkCredential("MyAccount", "pwd", "MyDomain"), используются, хотя мой служебный номер сброшен.

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

Я просто сделал изменение кода для tesing и ниже разница в сокетов

AcquireDefaultCredential(package = NTLM, intent = Outbound) 

Vs

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

Если я помню, код конфигурации всегда побеждает над конфигурационными файлами, дизайн в рамках .NET. Сначала загружается Config, и когда код запускается, он перезаписывает настройку. – Nikki9696

+0

Мой код, введенный через конфигурацию, запускается снова и сбрасывает значение. Но как-то он уже отправляет учетные данные. – Billa

ответ

1

Если я вас понял правильно, тогда я думаю, вам нужно добавить ключи для вашего Acc ount, User Name и Password в разделе appSettings в файле конфигурации.

<appSettings> 
    <add key="YourDomain" value="yourAccount"/> 
    <add key="UserName" value="yourAccount"/> 
    <add key="Password" value="yourAccount"/> 
</appSettings> 

После этого в вашем коде,

EmployeeService prxy = new EmployeeService(); 
prxy.Credentials = new System.Net.NetworkCredential(System.Configuration.ConfigurationManager.AppSettings["UserName"].ToString(), System.Configuration.ConfigurationManager.AppSettings["Password"].ToString(), System.Configuration.ConfigurationManager.AppSettings["YourDomain"].ToString()); 
//while debug, prxy.UseDefaultCredentials= false here 
//My soap extension gets executed and resets credentials. 
prxy.GetEmployee(empId); 
+0

Это то, что у меня есть сейчас, и хочу избавиться от этого ... Фактический вопрос заключается в том, как избавиться от этого через config. – Billa

+0

Невозможно избавиться от этого. –