我正在.net core 2.1 上运行一个应用程序。我通过已成功生成 WcfServiceClient 的连接服务添加了 wsdl Web 服务。
使用Basic Autorization时,它工作正常。
这是我用来调用 helloword soap 方法的类:
public string HellowWorld(string input)
{
string wsRes = null;
try
{
var service = new WorkerProcessServiceClient();
var url = $"http://ServerUrl/Directory/WsName.svc";
UriBuilder uriBuilder = new UriBuilder(url);
service.Endpoint.Address = new EndpointAddress(uriBuilder.Uri);
service.ClientCredentials.UserName.UserName = Username;
service.ClientCredentials.UserName.Password = Password;
using (OperationContextScope scope = new OperationContextScope(service.InnerChannel))
{
HttpRequestMessageProperty httpRequestProperty = new HttpRequestMessageProperty();
httpRequestProperty.Headers[System.Net.HttpRequestHeader.Authorization] =
"Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(service.ClientCredentials.UserName.UserName
+ ":"
+ service.ClientCredentials.UserName.Password));
OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpRequestProperty;
wsRes = service.HelloWorldAsync(input, RetailContext).GetAwaiter().GetResult();
service.Close();
}
}
catch (Exception ex)
{
wsRes = ex.Message;
}
return wsRes;
}
这适用于在Basic Authorization上运行的服务器。我在SOAP UI中使用相同的凭据,并且运行良好。我什至不需要指定
<==> 现在的问题 <=>
我有第二台使用NTLM Authorization运行的服务器。我都做了:'(但似乎没有任何效果。
1 - 我改变了我service.clientCredential.Username
并service.clientCredential.Windows
添加了service.clientCredential.Windows.domain
2 - 我也将标题更改"Basic " + Convert...
为"Ntlm " + Convert...
3 - 我在标题中添加了域,并将其放在首位和末位。
我不知道还能做什么请帮忙。