使用Web服务调用从.net C#Web服务调用SAP API端点时出错

时间:2013-10-21 11:40:34

标签: c# .net web-services service

我目前正在创建一个.net C#服务,该服务使用webservice调用将信息从CRM 2011发送到SAP。

凭据如下:

((BasicHttpBinding)defaultBinding).Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
((BasicHttpBinding)defaultBinding).Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic; //.Ntlm;

PropertyInfo piClientCreds = type.GetProperty("ClientCredentials");
ClientCredentials creds = (ClientCredentials)piClientCreds.GetValue(obj, null);
PropertyInfo piWindowsCreds = creds.GetType().GetProperty("Windows");
WindowsClientCredential windowsCreds = (WindowsClientCredential)piWindowsCreds.GetValue(creds, null);
PropertyInfo piAllowNtlm = windowsCreds.GetType().GetProperty("AllowNtlm");
piAllowNtlm.SetValue(windowsCreds, true, null);
PropertyInfo piCredentials = windowsCreds.GetType().GetProperty("ClientCredential");
piCredentials.SetValue(windowsCreds, credentials, null);
PropertyInfo piImpersonation = windowsCreds.GetType().GetProperty("AllowedImpersonationLevel");
piImpersonation.SetValue(windowsCreds, System.Security.Principal.TokenImpersonationLevel.Impersonation, null);

我得到的错误是:

  

{System.ServiceModel.Security.MessageSecurityException:HTTP   请求未经授权使用客户端身份验证方案'Ntlm'。该   从服务器收到的身份验证标头是'基本的   realm =“上传保护区”。 ---> System.Net.WebException:The   远程服务器返回错误:(401)未经授权。在   System.Net.HttpWebRequest.GetResponse()at   System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(时间跨度   超时)---内部异常堆栈跟踪结束---

任何帮助解决这个问题,如果可能的话,让它变得动态,我们非常感激。

先谢谢你。

1 个答案:

答案 0 :(得分:1)

问题很明显。当客户端尝试使用NTLM进行身份验证时,服务器希望您的客户端使用基本身份验证。尝试使用UserNamePasswordClientCredential进行身份验证。您应该仅通过HTTPS等安全传输方式执行此操作。