2014-07-21 167 views
0

我只想从使用用户名和密码的c#客户端使用HTTPS-soap-webservice。 我不想使用app.config,所以我只是直接在代码中设置了几个属性。HTTP请求未经授权......“匿名”

当我试图访问一个Web服务,方法我总是得到以下错误:

The HTTP request is unauthorized with client authentication scheme 'Anonymous'. The authentication header received from the server was 'Basic realm......

这是我的代码(我试过很多更认为,但现在这是我的代码):

var b = new WSHttpBinding(SecurityMode.TransportWithMessageCredential); 
b.Security.Message.ClientCredentialType = MessageCredentialType.UserName; 
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic; 

.... 
var client = new MyClient(b, new Endpoint("https://myurl...")) 
client.clientCredentials.UserName.UserName = "myuser"; 
client.clientCredentials.UserName.Password = "mypassword"; 

client.myMethodcall(); 

就像我上面写的,我已经找到了很多“解决方案”如何解决这个错误,但他们只是不适合我。我使用了basicHttpBinding,我使用了WSHttpBinding,我设置了绑定超时,我使用了SecurityMode.TransportWithMessageCredential等。看起来客户端根本没有设置身份验证头!

它应该没有区别直接在代码中设置所有属性或使用app.config,对不对?任何人都可以帮助我吗?

+0

当我只使用app.config来定义它的工作没有问题的绑定。那么上面的代码有什么问题?编辑:我使用上面的EndpointAddress而不是端点。 –

回答

0

我终于找到了错误。

我创建的客户端这需要在app.config的设置和我创建的客户端针对我直接在代码中设置的设置,发现,从在app.config所述一个使用

SecurityMode.Transport 

由默认而不是

SecurityMode.TransportWithMessageCredentials 

所以我将我的代码更改为SecurityMode.Transport,它的工作原理。