如何解决仅生产服务器针对基本身份验证生成错误“使用客户端身份验证方案'Basic'的HTTP请求未授权...”
我们已经在多台服务器上运行了相同的代码,并且只有在生产服务器上,身份验证才会导致:
HTTP请求未经客户端身份验证方案“基本”授权。从服务器收到的身份验证标头是“ Basic realm =“ NuSOAP server””。
带有未提供数据提供者信息的当前绑定设置:
private ***PortType.***TypeClient LogIn()
{
BasicHttpBinding myBinding = new BasicHttpBinding();
myBinding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
myBinding.Security.Transport.ClientCredentialType =
HttpClientCredentialType.Basic;
myBinding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;
myBinding.MaxBufferSize = int.MaxValue;
myBinding.ReaderQuotas = System.Xml.XmlDictionaryReaderQuotas.Max;
myBinding.MaxReceivedMessageSize = int.MaxValue;
myBinding.AllowCookies = true;
myBinding.CloseTimeout = new TimeSpan(0,5,0);
myBinding.OpenTimeout = new TimeSpan(0,0);
myBinding.ReceiveTimeout = new TimeSpan(0,0);
myBinding.SendTimeout = new TimeSpan(0,0);
var portType =
new ***TypeClient(myBinding,new EndpointAddress(***));
portType.ClientCredentials.UserName.UserName = _login;
portType.ClientCredentials.UserName.Password = _password;
portType.Endpoint.EndpointBehaviors.Add(new FaultFormatingBehavior());
return portType;
}
internal class FaultFormatingBehavior : IEndpointBehavior
{
public void Validate(ServiceEndpoint endpoint) { }
public void AddBindingParameters(ServiceEndpoint endpoint,BindingParameterCollection bindingParameters) { }
public void ApplydispatchBehavior(ServiceEndpoint endpoint,Endpointdispatcher endpointdispatcher) { }
public void ApplyClientBehavior(ServiceEndpoint endpoint,ClientRuntime clientRuntime)
{
clientRuntime.ClientMessageInspectors.Add(new FaultMessageInspector());
}
}
public class FaultMessageInspector : IClientMessageInspector
{
public object BeforeSendRequest(ref Message request,IClientChannel channel)
{
return null;
}
public void AfterReceiveReply(ref Message reply,object correlationState)
{
if (reply.IsFault)
{
var erratr = reply.GetBody<XElement>();
var error = erratr.Elements().Where(p => p.Name == "faultstring").FirstOrDefault()?.Value;
Message newFaultMessage = Message.CreateMessage(reply.Version,error,error);
reply = newFaultMessage;
throw new Exception("Remote service response returned error: " + error);
}
}
}
由于必须保持兼容性,因此代码是用netcoreapp2.1编写的。 我正在寻找代码中潜在的错误,或者可能会导致这种行为的服务器设置建议。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。