首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WCF-使用登录密码身份验证的客户端

WCF-使用登录密码身份验证的客户端
EN

Stack Overflow用户
提问于 2014-03-13 17:32:31
回答 2查看 4.3K关注 0票数 0

我正在尝试连接到异地asmx-service。我有用于身份验证的asmx url和login-password。我已经添加了服务的服务引用和VS2010生成的WCF-client与配置:

代码语言:javascript
复制
<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="serviceSoap" />
        </basicHttpBinding>
        <customBinding>
            <binding name="serviceSoap12">
                <textMessageEncoding messageVersion="Soap12" />
                <httpTransport />
            </binding>
        </customBinding>
    </bindings>
    <client>
        <endpoint address="http://tourml.danko.ru:9191/Service.asmx"
            binding="basicHttpBinding" bindingConfiguration="serviceSoap"
            contract="DankoTourMLService.serviceSoap" name="serviceSoap" />
        <endpoint address="http://tourml.danko.ru:9191/Service.asmx"
            binding="customBinding" bindingConfiguration="serviceSoap12"
            contract="DankoTourMLService.serviceSoap" name="serviceSoap12" />
    </client>

我已经使用basicHttpBinding创建了客户端并设置了凭据。然后我尝试调用服务方法:

代码语言:javascript
复制
var service = new serviceSoapClient("serviceSoap");

service.ClientCredentials.UserName.UserName = username;
service.ClientCredentials.UserName.Password = password;            

var items = service.GetItemList();

但是这里抛出了System.ServiceModel.Security.MessageSecurityException:

代码语言:javascript
复制
The HTTP request is unauthorized with client authentication scheme 'Anonymous'. The authentication header received from the server was ''.

使用内部System.Net.WebException:

代码语言:javascript
复制
{"The remote server returned an error: (401) Unauthorized."}

ClientCredentials设置有什么问题?我是否应该使用另一个绑定,而不是basicHttpBinding?

EN

回答 2

Stack Overflow用户

发布于 2014-03-13 20:38:20

http://msdn.microsoft.com/en-us/library/ms732391(v=vs.110).aspx根据上面的说明。当您需要指定凭据时,应设置端点的安全性。在您的配置中并非如此。

=>引用不能创建正确的配置有两种可能性(不太可能)。第二个=>,您必须在服务上而不是在传输上指定凭据。

代码语言:javascript
复制
var service = new serviceSoapClient("serviceSoap");

//service.ClientCredentials.UserName.UserName = username;
//service.ClientCredentials.UserName.Password = password;            

service.setCredentials() (or something)
var itmes = service.getItems();

您应该查找该服务的文档。

票数 0
EN

Stack Overflow用户

发布于 2018-06-19 00:19:44

我知道这是一个老帖子,但最近我遇到了同样的问题,也许我会帮助其他人我是如何解决它的。我有一个.net web应用程序,为支付系统使用SOAP服务,具有基本身份验证。解决方案是使用用户名前面带有'u‘的客户端凭据,并在web.config中指定绑定传输。

代码语言:javascript
复制
client.ClientCredentials.UserName.UserName = "uMyUsername";
client.ClientCredentials.UserName.Password = "MyPassword";

在web.config中:

代码语言:javascript
复制
<bindings>
  <basicHttpBinding>
    <binding name="XYZ">
      <security mode="Transport" >
        <transport clientCredentialType="Basic"/>
      </security>
    </binding>
    <binding name="XYZ" />
  </basicHttpBinding>
</bindings>
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22374289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档