我們編寫了一段代碼,可以調用具有域憑據的服務。現在域名已更改,並計劃使用默認的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);
新代碼/配置變化只
規劃通過額外的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)
更新2
我只是做了tesing代碼變化及以下的插座通信
AcquireDefaultCredential(package = NTLM, intent = Outbound)
差Vs
AcquireCredentialsHandle(package = NTLM, intent = Outbound, authdata = MyDomain\MyAccount)
如果我還記得,代碼配置總是戰勝的配置文件,在.NET框架的設計。首先加載Config,當代碼運行時,它將覆蓋設置。 – Nikki9696
通過配置注入我的代碼再次運行並重置值。但不知何故,它已經發送了憑據集。 – Billa