使用PHP示例代码中的ASP.NET将凭据传递给Web服务

时间:2013-09-17 13:38:31

标签: php asp.net web-services credentials

我正在尝试在ASP.NET应用程序中使用Despatch Bay运输API,但所有示例代码都使用PHP。

之前我使用过Web服务,但是在将凭据传递给它时遇到了麻烦。

PHP示例代码创建API的新实例,如下所示:

$soapOptions = array ('login' => APIUSER, 'password' => APIKEY);
$DespatchBay = new SoapClient("http://api.despatchbaypro.com/api/soap/v10/addressing?wsdl",$soapOptions);

使用Visual Web developer Express,我已经为我的Project添加了一个服务引用,现在可以创建一个这样的实例:

Dim dbService As New DespatchBayAddresses.AddressingServicePortTypeClient

并尝试从邮政编码中写出一个地址,如下所示:

Response.Write(dbService.GetDomesticAddressKeysByPostcode("INSERT POSTCODE").ToString())

但是,很自然地,我收到了一个错误:

The remote server returned an error: (401) Unauthorized.

我知道原因,因为我没有通过我的API_KEYAPI_USER凭据。

但是,我确实很愚蠢,但无法弄明白。

我试过

dbService.ClientCredentials.UserName.UserName = MY_USER
dbService.ClientCredentials.UserName.Password = MY_KEY

但同样的错误。我需要能够从我的数据库中检索的变量中传递这些值,而不是web.config中的静态值,所以有人可以指出我向API提供这些详细信息的方向吗?

由于

1 个答案:

答案 0 :(得分:0)

是的......好吧,原来问题是我使用的是错误的网络服务类型。

最终,发现了这个:

http://markfreedman.com/index.php/2010/10/13/web-reference-vs-service-reference/

这指向了我正确的方向,使用那里提到的步骤添加了Reference,现在有了这个(工作)代码:

Function getAddressesByPostcode(User As String, Api_Key As String, Postcode As String) As Dictionary(Of String, String)
    Dim d As New com.despatchbaypro.api.AddressingService
    d.Credentials = New NetworkCredential(User, Api_Key)
    Dim Addresses = d.GetDomesticAddressKeysByPostcode(Postcode)
    Dim dictionary As New Dictionary(Of String, String)
    For Each address In Addresses
        'Dim add As com.despatchbaypro.api.AddressDetailType = d.GetDomesticAddressByKey(address.Key)
        dictionary.Add(address.Key, address.Address)
    Next
    Return dictionary
End Function