2016-07-13 5 views
8

हमने डोमेन प्रमाण-पत्रों के साथ एक सेवा कॉल करने के लिए एक कोड वापस लिखा था। अब डोमेन बदल दिए गए हैं और डिफ़ॉल्ट विंडोज खातानेटवर्क क्रेडेंशियल यूज डीफॉल्ट प्रमाण पत्र काम नहीं कर रहे हैं

का उपयोग करने की योजना बना रहे हैं, इसलिए मैं कॉन्फ़िगरेशन के माध्यम से एएसएमएक्स webservice के लिए नेटवर्क प्रमाण-पत्र रीसेट करने का प्रयास कर रहा हूं। मैंने एक सोपएक्सेंट्सियन क्लास बनाया और वहां पर ओवरराइड करने का प्रयास किया, यहां तक ​​कि यह लाइन को निष्पादित करता है। लेकिन इसे लागू किया जाता है कभी नहीं और हमेशा नीचे मौजूदा कोड को जीतने के

वास्तविक कोड

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

नए कोड/कॉन्फ़िग बदलें केवल

योजना अतिरिक्त dll और config परिवर्तन के माध्यम से सुई। तो मूल उपरोक्त कोड में कोड परिवर्तन की आवश्यकता नहीं है/अब निषिद्ध

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> 

कोई एक पता है कि गतिशील नेटवर्क config के माध्यम से एक ASMX सेवा के लिए इस्तेमाल किया साख को बदलने के लिए?

अद्यतन:

जबकि डिबग, मैं नेटवर्क क्रेडेंशियल रीसेट कर रहे हैं देख सकते हैं। लेकिन किसी भी तरह से यह अनुरोध का आह्वान करते समय सर्वर भेजता है।

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) 

अद्यतन 2

मैं सिर्फ tesing के लिए एक कोड परिवर्तन अगर मैं तुम्हें समझ में आ किया था और नीचे सॉकेट संचार

AcquireDefaultCredential(package = NTLM, intent = Outbound) 

में अंतर है बनाम

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

तो मुझे याद है, कोड config हमेशा config फ़ाइलों पर जीतता है, नेट ढांचे में डिजाइन द्वारा। कॉन्फ़िगर पहले लोड होता है, और जब कोड चलता है, तो यह सेटिंग को ओवरराइट कर देगा। – Nikki9696

+0

कॉन्फ़िगरेशन के माध्यम से इंजेक्शन वाला मेरा कोड दोबारा चलाता है और मान को रीसेट करता है। लेकिन किसी भी तरह से यह पहले से ही प्रमाण पत्र सेट भेज रहा है। – Billa

उत्तर

1

ठीक है तो मुझे लगता है कि आपको अपने एसीसी के लिए कुंजी जोड़ने की जरूरत है कॉन्फ़िगरेशन फ़ाइल में 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

यही वह है जो मैं वर्तमान में कर रहा हूं और इससे छुटकारा पाना चाहता हूं ... वास्तविक सवाल यह है कि कॉन्फ़िगर के माध्यम से इसे कैसे छुटकारा पाएं। – Billa

+0

इससे छुटकारा पाने के लिए संभव नहीं है। –

संबंधित मुद्दे