我遇到了一些奇怪的行为(意味着我不明白发生了什么),如果可能的话,我希望得到一些帮助来解决它。
我们有一些 Dynamics 365 NAV Business Central Web 服务公开了一个带有 SSL 证书的安全,我们正在使用一些标准 C# 代码访问它。
我们已将 SOAP 代理添加到 ASP .NET Webforms 应用程序,这一切都按预期工作。
然后我们声明一个 Web 服务的实例,使用新的 NetworkCredential 实例设置凭据,并将 Web 服务设置为使用 PreAuthenticate,然后在我们的服务上调用该方法。
public static bool CheckServiceStatus()
{
bool returnValue = false;
try
{
svcWebServiceServer webService = new svcWebServiceServer();
webService.Credentials = new NetworkCredential(Globals.WebServiceUsername, Globals.WebServicePassword, Globals.WebServiceDomain);
webService.PreAuthenticate = true;
webService.FncServiceStatus(ref returnValue);
}
catch (Exception ex)
{
LoggingFunctions.WriteMessageToDisk("CheckServiceStatus error : " + ex.Message);
}
return returnValue;
}
当我们在 Fiddler 中查看日志时,我们发现该服务被调用了两次。第一次调用时,我们收到一个 401 错误响应,告诉我们必须使用 NTLM,然后使用更长的 NTLM 密钥进行第二次调用,调用成功,我们得到我们的数据......
第一次尝试...
第二次尝试...
谁能告诉我如何进行网络服务调用,以便第一次进行身份验证?401s 被当作 DDOS 类型的攻击,然后流量被阻止。
我尝试更改凭据传递的方式,但这没有任何区别......
public static bool CheckServiceStatus()
{
bool returnValue = false;
try
{
svcWebServiceServer webService = new svcWebServiceServer();
CredentialCache credCache = new CredentialCache();
credCache.Add(new Uri(webService.Url), "NTLM", new NetworkCredential(Globals.WebServiceUsername, Globals.WebServicePassword, Globals.WebServiceDomain));
webService.Credentials = credCache;
webService.PreAuthenticate = true;
webService.FncServiceStatus(ref returnValue);
}
catch (Exception ex)
{
LoggingFunctions.WriteMessageToDisk("CheckServiceStatus error : " + ex.Message);
}
return returnValue;
}