我正在尝试在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_KEY
或API_USER
凭据。
但是,我确实很愚蠢,但无法弄明白。
我试过
dbService.ClientCredentials.UserName.UserName = MY_USER
dbService.ClientCredentials.UserName.Password = MY_KEY
但同样的错误。我需要能够从我的数据库中检索的变量中传递这些值,而不是web.config中的静态值,所以有人可以指出我向API提供这些详细信息的方向吗?
由于
答案 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