我们通过WCF服务公开Entity对象。要检索实体,我们通过WCF发出几个请求,接近100或更多。我们最近切换到摘要式身份验证,并注意到每个服务器请求都发出了401.这会在服务器上产生两倍的负载,并且由于我们有非常大的“帖子”,这将产生额外的流量延迟。目标是从服务器只有一个Challenge(401),其余的请求应包含Auth头,因此服务器不会发出401.由于Digest是一个基于挑战的协议,即将到期的nonce,即使我们可能无法完全消除401,但至少可以避免每次请求。由于我们控制服务器和客户端,我们希望发送每个请求中包含的Digest Auth标头。 在.NET 2.0 Web服务样式Web引用代理/客户端(继承SOAPHttpClientProtocol)中有一个Pre-Authenticate属性,它允许Auth头包含在请求中,但是使用WCF服务Web引用客户端(使用ChannelFactory) “T。设置此属性时,请求/响应流量存在明显差异,而不是。由于这是摘要式身份验证(非基本),因此我无法在BeginRequest期间使用ClientMessageInspector手动添加Auth标头。
NetworkCredential creds = new NetworkCredential("username", "pass", "domain");
//using .NET 2.0 "Web Reference" Style client that uses inherits SoapHttpClientProtocol:
webReferenceClient = new Service1();
webReferenceClient.Credentials = creds;
//**Pre Authenticate **
webReferenceClient.PreAuthenticate = true;
string resp1 = "";
for (int i = 0; i < 3;i++)
resp1 = resp1 + webReferenceClient.SayHello("jack");
//using WCF "Service Reference" Client that uses ChannelFactory
serviceReferenceClient = new Service1Client();
serviceReferenceClient.ClientCredentials.HttpDigest.ClientCredential = creds;
serviceReferenceClient.ClientCredentials.HttpDigest.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation;
string resp="";
for (var i = 0; i < 3;i++)
resp = resp + serviceReferenceClient.SayHello("jack");
使用.NET 2.0样式Web引用客户端进行Fiddler跟踪,并设置了Preauthenticate。请注意,只有一个401,其余的请求都有Auth标头。
使用WCF样式服务引用客户端进行跟踪。每个请求都从服务器生成401:
我看到两个选项:
还有其他选择吗?