- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我们很久以前写了一个代码来调用具有域凭据的服务。现在域已更改并计划使用默认 Windows 帐户
所以我正在尝试通过配置重置 asmx 网络服务的网络凭据。我创建了一个 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 和配置更改注入(inject)。所以现在不需要/禁止对上面原始代码的代码更改
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 服务的网络凭证吗?
更新:
调试时,我可以看到网络凭证已重置。但是它在调用请求时以某种方式发送到服务器。
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 passes 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
我只是为测试做了一个代码更改,下面是套接字通信的区别
AcquireDefaultCredential(package = NTLM, intent = Outbound)
对比
AcquireCredentialsHandle(package = NTLM, intent = Outbound, authdata = MyDomain\MyAccount)
最佳答案
如果我理解正确,那么我认为您需要在配置文件的 appSettings 下为您的帐户、用户名和密码添加 key 。
<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);
关于c# - NetworkCredential UseDefaultCredentials 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38357792/
我正在编写一些代码来利用第三方组件,当我开始使用它时,我需要提供一个实现ICredentials的对象。 如果我写以下内容... var credential = new NetworkCredent
我将要在我的 C#/WPF 应用程序中创建一个身份验证模块。要验证用户身份,我想使用 NetworkCredential存储凭据。 Credential = new NetworkCredential
在 C# 代码中,我们使用网络身份验证: req = HttpWebRequest.Create(Url) req.Method = "POST" req.Headers.Add(HttpReques
我需要将包含当前模拟用户凭据的 NetworkCredential 对象从 asp.net 应用程序传递到 Web 服务。 我的代码如下所示: WindowsIdentity windowsIdent
虽然我目前正在我们的 Sharepoint 服务器上开发这个 WinForms 应用程序,但我希望完成的程序能够在域上的任何计算机上运行。我正在使用 WSS 网络服务获取我从 Sharepoint 使
我正在尝试使用 HttpClient 为 HTTP Post 或 HTTP Get 编写客户端。在谷歌搜索时,我遇到了在 HttpClient 对象中设置这些身份验证的这些方法。一个使用 Networ
我正在尝试通过 PHP 访问网络服务。 Web 服务返回一个带有 jpeg 图像的字节数组,然后显示在网页上。 今天服务是通过 C# 调用访问的,就像这样 ImgService i = new Img
访问web服务时是否需要设置networkCredential域? var service = new service1.SoapEx(); service.Credentials = new Net
我们很久以前写了一个代码来调用具有域凭据的服务。现在域已更改并计划使用默认 Windows 帐户 所以我正在尝试通过配置重置 asmx 网络服务的网络凭据。我创建了一个 SoapExtentsion
我正在尝试从控制台应用程序调用 Web 服务,我需要为客户端提供 System.Net.NetworkCredential 对象。 是否可以为启动应用程序的用户创建一个 NetworkCredenti
我有一个 WCF 服务,它使用 Windows 身份验证来查看服务契约(Contract),并且服务中的特定方法配置为仅由特定用户 UserX 访问。 [PrincipalPermission(Sec
是否可以将网络凭证(或变体)转换为 PSCredential? 我想透明地使用当前用户的凭据,但不想提示他们。 最佳答案 $cred = new-object PSCredential($nc.Use
这很可能是一个关于 NetworkCredential 类的非常幼稚的问题。请原谅我的经验不足... 我使用用户名、密码和域创建 NetworkCredential。然后我使用 HttpWebRequ
我们如何将 WindowsIdentity 转换为 NetworkCredential?我正在测试我的 WCF 服务以验证匿名调用者是否被阻止。为此,我想做类似的事情: myProxy.ClientC
我喜欢使用 Microsoft.Exchange.WebService API: C# 工作正常 ExchangeService service = new ExchangeService(userD
我有一个带有此代码的 c# .net 客户端: using(WebClient client = new WebClient()) { string serialisedData = "";
我必须实现以下场景:ASP .NET 网络应用程序1.用户登录2. 使用登录用户的凭据,我必须从 Sharepoint 站点下载一些文件; 环境:- 现在 web.config 设置为模拟和 Wind
出于某种原因,我过去使用 DefaultCredentials 工作的 WebClient 应用程序现在给我一个 401 Unauthorized。使用具有完全相同 ID 和 PW 的 Network
我正在使用 asmx 网络服务并且我已经添加了 NetworkCredential: Credentials = new NetworkCredential("Farshad", "HN", "Yaa
我正在尝试使用 NetworkCredential 类通过 ASP.NET 访问网页。但是,我不断收到以下消息的异常 System.Security.Cryptography.Cryptographi
我是一名优秀的程序员,十分优秀!