通过PBBI的客户端身份验证,HTTP请求未经授权

时间:2015-04-16 20:27:48

标签: c# asp.net web-services

我试图通过Web服务连接我的开发PBBI服务器以验证地址。看起来我遇到了身份验证问题。我没有这方面的文件。如果你们有任何关于验证服务的线索我需要验证的方法是什么?

异常

  

mscorlib.dll中发生未处理的“System.ServiceModel.Security.MessageSecurityException”类型异常

     

其他信息:HTTP请求未经授权使用客户端身份验证方案“Ntlm”。从服务器收到的身份验证标头是'Basic realm =“DCGRealm”'

代码

var validateClient = new ValidateAddressClient("ValidateAddressPort");
 validateClient.ClientCredentials.UserName.UserName ="Admin";
 validateClient.ClientCredentials.UserName.Password = "ADMIN";

 var address1 = new input_portAddress
 {
      AddressLine1 = "1825B Kramer Lane",
      AddressLine2 = "Suite 100",
      PostalCode = "78758",
      City = "Austin",
      StateProvince = "Texas"
  };
  var addresses = new input_portAddress[2];
  addresses[0] = address1;
  var options = new options {OutputCasing = OutputCasing.M};
  output_portAddress[] results =
                    validateClient.ValidateAddress(options, addresses);//Exception happening here.

配置

 <system.serviceModel>
    <bindings>
        <basicHttpBinding>
          <binding name="ValidateAddressSoapBinding" >
             <security mode="TransportCredentialOnly">
              <transport clientCredentialType="Basic"/>
            </security>
          </binding>
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://webserviceURL:8080/soap/ValidateAddress"
            binding="basicHttpBinding" bindingConfiguration="ValidateAddressSoapBinding"
            contract="PBBIWebService.ValidateAddress" name="ValidateAddressPort"  />
    </client>
</system.serviceModel>

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

有关配置更新此部分system.serviceModel > bindings > basicHttpBinding

<basicHttpBinding>
  <binding name="ValidateAddressSoapBinding" >
      <security mode="Transport">
      <transport clientCredentialType="Basic"/>
    </security>
  </binding>
</basicHttpBinding>

代码方

var validateClient = new ValidateAddressClient();
validateClient.ClientCredentials.UserName.UserName = "Admin";
validateClient.ClientCredentials.UserName.Password = "ADMIN";
validateClient.Open();
var address1 = new input_portAddress
{
    AddressLine1 = "1825B Kramer Lane",
    AddressLine2 = "Suite 100",
    PostalCode = "78758",
    City = "Austin",
    StateProvince = "Texas"
};
var addresses = new input_portAddress[2];
addresses[0] = address1;
var options = new options { OutputCasing = OutputCasing.M };
output_portAddress[] results =
                    validateClient.ValidateAddress(options, addresses);
validateClient.Close();