在Linux机器上运行ac#app时,SOAP身份validation失败

我正在尝试通过ac#app连接到第三方SOAP服务。 在Windows计算机上运行应用程序时,以下代码有效:

var ws = new MyWebServiceClient(); ws.ClientCredentials.Windows.ClientCredential = new System.Net.NetworkCredential("myusername", "mypassword", "mydomain"); var response = ws.SomeEndpoint(); Element xmlResult = response.Result.SomeEndpoint; ... 

但是,如果我从Linux或Mac OS运行相同的代码 ,它将失败:

The HTTP request is unauthorized with client authentication scheme 'Negotiate'. The authentication header received from the server was 'Negotiate, NTLM'.

我有一个python应用程序,可以在任何操作系统上运行时使用相同的SOAP服务而不会遇到问题,所以问题不在我的Linux发行版/设置中。

有没有人看到.NET核心的类似问题或找到了解决方法?

我发现这个问题报告表明早期版本的.NET核心存在限制/错误,可能导致类似于我所看到的行为,但它声称这些问题在RC2之后得到了解决。

假设问题报告是错误的并且问题仍然存在于.NET核心的Linux / Mac发行版中,是否有人知道我如何获得CredentialCache解决方法,在该文章中建议使用SOAP客户端? 我是.NET的新手,也是.NET soap客户的新手,所以如果这是一个天真的问题我会道歉。

看来,对于非Windows,.NET核心在协商失败后无法尝试NTLM。 我知道,从python应用程序,NTLM使用这个特定的SOAP服务。 如何强制它跳过“谈判”并直接进入NTLM? 从上面的文章中可以看出,这就是CredentialCache解决方法。 我只是无法弄清楚如何使用SOAP服务…

.Net Core SOAP客户端,具有NTLM身份validation和CredentialCache

如MSDN和此处所述 ,

 BasicHttpBinding basicHttpBinding = new BasicHttpBinding(); basicHttpBinding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly; basicHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm; EndpointAddress endpoint = new EndpointAddress("http://myservice"); var factory = new ChannelFactory(basicHttpBinding, endpoint); CredentialCache myCredentialCache = new CredentialCache(); NetworkCredential myCreds = new NetworkCredential("username", "password", "domain"); myCredentialCache.Add("ContoscoMail", 45, "NTLM", myCreds); factory.Credentials.Windows.ClientCredential = myCredentialCache.GetCredential("ContosoMail", 45, "NTLM"); var client = factory.CreateChannel(); // ... use the webservice 

更新:这是2.1中修复的错误

正如这里已经遇到的并且在这里修复了一个bug,它应该与.net core 2.1一起使用(未发布并计划在2018年第一季度使用 )。 所以现在,从Linux连接时应该尝试使用其他类型的身份validation(查看RuntimeInformation.IsOSPlatform )。

了解身份validation在Windows / Console应用程序VS Web应用程序中的工作方式非常重要。

您的问题的答案跳过谈判(从服务器):转到IIS – >转到站点/应用程序 – >选择身份validation(双击它) – >您将在此处看到选项 – >在Windows身份validation下(如果这已启用)然后 – >单击右侧操作盘中的提供程序。

在这里,您可以向上移动/删除“谈判”选项。