仅在特定机器上调用Web服务时

本文关键字:调用 Web 服务 机器 | 更新日期: 2023-09-27 18:07:26

我们用c#开发了一个WPF应用程序,并使用RestSharp与一个简单的Web服务进行通信,如下所示:

Client = new RestClient(serviceUri.AbsoluteUri);
Client.Authenticator = new NtlmAuthenticator(SvcUserName, SvcPassword.GetString());

一切都很好,直到我们接到电话,在一些机器上(大多数工作)应用程序无法连接到服务。使用fiddler直接调用服务方法可以工作。然后我们提取了一个小的。net控制台应用程序,并尝试使用RestSharp和直接使用HttpWebRequest进行服务调用,使用401再次失败。现在我们启用了System。网络追踪,发现了一些东西。在第一个401(正常)之后,故障机器产生以下日志:

系统。Net Information: 0: [4480] Connection#3741682 - Received headers{连接:维生内容长度:1293内容类型:text/html日期:2015年8月10日星期一12:37:49 GMT服务器:microsoft iis/8.0WWW-Authenticate:谈判,NTLMX-Powered-By: ASP。网}。系统。Net Information: 0: [4480] ConnectStream#39451090::ConnectStream(Buffered 1293 bytes.)系统。网络信息:0:[4480]关联HttpWebRequest#2383799与ConnectStream#39451090系统。Net Information: 0: [4480] associate HttpWebRequest#2383799 with HttpWebResponse#19515494系统。Net Information: 0:[4480]安全包枚举:系统。网络信息:0:[4480]协商系统。Net Information: 0: [4480] NegoExtender系统。Net Information: 0: [4480] Kerberos系统。网络信息:0:[4480]NTLM系统。网络信息:0:[4480]通道系统。Net Information: 0: [4480] Microsoft统一安全协议提供商系统。网络信息:0:[4480]WDigest系统。网络信息:0:[4480]TSSSP系统。网络信息:0:[4480]pku2u系统。网络信息:0:[4480]CREDSSP

系统。Net Information: 0: [4480] acquirecredentialhandle (package = . Net)NTLM, intent = Outbound, authdata = (string.empty) '集团' svc_account)

系统。网络信息:0:[4480]InitializeSecurityContext(凭证=System.Net。SafeFreeCredential_SECURITY, context = (null), targetName =HTTP/mysvc.mycorp.com, flags = Delegate, MutualAuth,连接)系统。网络信息:0:[4480]InitializeSecurityContext(In-Buffers count=1, Out-Buffer length=40)返回代码= ContinueNeeded)。

一台工作的机器产生这样的输出:

系统。Net Information: 0: [3432] Connection#57733168 - Empfangene Statusleiste: Version = 1.1, StatusCode = 401, StatusDescription = Unauthorized。系统。网络信息:0:[3432]连接#57733168 -头{内容类型:text/html服务器:microsoft iis/8.0WWW-Authenticate:谈判,NTLMX-Powered-By: ASP。网日期:2015年8月10日星期一15:15:11 GMT内容长度:1293我很高兴。系统。Net Information: 0: [3432] ConnectStream#35016340::ConnectStream(Es wurden 1293 Bytes gepuffert.)系统。Net Information: 0:[3432]关联HttpWebRequest#64062224与ConnectStream#35016340系统。Net Information: 0: [3432] associationhttpwebrequest #64062224与HttpWebResponse#64254500系统。网络信息:0:[3432][endnoteref: 10]系统。网络信息:0:[3432]协商系统。Net Information: 0: [3432] NegoExtender系统。Net Information: 0: [3432] Kerberos系统。网络信息:0:[3432]NTLM系统。网络信息:0:[3432]通道系统。Net Information: 0: [3432] Microsoft统一安全协议提供商系统。网络信息:0:[3432]WDigest系统。网络信息:0:[3432]TSSSP系统。网络信息:0:[3432]pku2u系统。网络信息:0:[3432]CREDSSP

系统。Net Information: 0: [3432] acquirecredentialhandle (package =)协商,意图=出站,authdata = System.Net.SafeSspiAuthDataHandle) 系统。网络信息:0:[3432]InitializeSecurityContext(凭证=System.Net。SafeFreeCredential_SECURITY, context = (null), targetName =HTTP/mysvc.mycorp.com, flags = Delegate, MutualAuth, Connection)

系统。Net Information: 0: [3432] InitializeSecurityContext(Anzahl .)von In-Buffers = 1, Länge von Out-Buffer = 40, zur ckgegebener Code =ContinueNeeded)。

我想知道故障机器上的某些配置是否会导致这种情况。现在我不知道下一步该往哪里看。

更新:下面是我们简单测试工具的代码:

RestClient Client = new RestClient("https://mysvc.mycorp.com/service.svc");
        Client.Authenticator = new NtlmAuthenticator("corp''svc_account", "mypassword");
        var request = new RestRequest("api/Method", Method.POST);
        request.RequestFormat = DataFormat.Json;
        request.AddBody(new { Device_Key = "somestring" });
        request.Timeout = 200000;

        RestResponse response = (RestResponse)Client.Execute(request);

更新2:我们现在已经确认,这个问题只发生在新安装的win7机器上,有更新的企业形象。

仅在特定机器上调用Web服务时

这太疯狂了:事实证明,只要我在Windows 7机器上安装。net 4.5, WebRequest就工作了!我们认为罪魁祸首是部署在所有客户端机器上的。net 4.0框架缺失的补丁。所以,给你的机器打补丁:)