C# 联邦快递地址验证Web参考存在问题
我正在尝试让联邦快递地址验证应用程序样本在C#中工作。在联系我的FedEx技术联系人并让他在我的测试帐户上激活地址验证(显然,这被认为是需要额外权限的高级服务)之后,我能够编译并运行示例应用程序 然而,考虑到设置,我并没有得到我期望的结果C# 联邦快递地址验证Web参考存在问题,c#,web-services,asmx,fedex,C#,Web Services,Asmx,Fedex,我正在尝试让联邦快递地址验证应用程序样本在C#中工作。在联系我的FedEx技术联系人并让他在我的测试帐户上激活地址验证(显然,这被认为是需要额外权限的高级服务)之后,我能够编译并运行示例应用程序 然而,考虑到设置,我并没有得到我期望的结果 request.Options.ConvertToUpperCase = true; request.Options.CheckResidentialStatus = true; 基于这些标志,我希望地址以大写形式返回,并能够检查住宅或住宅状态属性,以确定商
request.Options.ConvertToUpperCase = true;
request.Options.CheckResidentialStatus = true;
基于这些标志,我希望地址以大写形式返回,并能够检查住宅或住宅状态属性,以确定商业与住宅。两者都没有发生
因此,我安装了Fiddler来查看正在进行的SOAP交换,发现outbound Options标记没有填充,只有一个属性MaximumNumberOfMatches
在Visual Studio创建的Reference.cs文件中是否有我应该检查的内容?我没有看到任何异常情况,但是发生了一些事情,阻止了某些属性的序列化
--编辑--
根据下面的建议更新了我的代码。不幸的是,它仍然只填充选项参数中的两个。我在下面介绍了C#设置代码和出站/入站SOAP请求。有人能想出其他选项没有在SOAP请求中发送的原因吗
AddressValidationRequest request = new AddressValidationRequest();
//
request.WebAuthenticationDetail = new WebAuthenticationDetail();
request.WebAuthenticationDetail.UserCredential = new WebAuthenticationCredential();
request.WebAuthenticationDetail.UserCredential.Key = "XXX-KEY-XXX"; // Replace "XXX" with the Key
request.WebAuthenticationDetail.UserCredential.Password = "XXX-PWD-XXX"; // Replace "XXX" with the Password
//
request.ClientDetail = new ClientDetail();
request.ClientDetail.AccountNumber = "XXX-ACCT#-XXX"; // Replace "XXX" with client's account number
request.ClientDetail.MeterNumber = "XXX-MTR#-XXX"; // Replace "XXX" with client's meter number
//
request.TransactionDetail = new TransactionDetail();
request.TransactionDetail.CustomerTransactionId = "***Address Validation v2 Request using VC#***"; // This is just an echo back
//
request.Version = new VersionId(); // Creates the Version element with all child elements populated
//
request.RequestTimestamp = DateTime.Now;
//
request.Options = new AddressValidationOptions();
request.Options.CheckResidentialStatus = true;
request.Options.CheckResidentialStatusSpecified = true;
request.Options.VerifyAddresses = true;
request.Options.MaximumNumberOfMatches = "5";
request.Options.StreetAccuracy = AddressValidationAccuracyType.MEDIUM;
request.Options.DirectionalAccuracy = AddressValidationAccuracyType.MEDIUM;
request.Options.CompanyNameAccuracy = AddressValidationAccuracyType.MEDIUM;
request.Options.ConvertToUpperCase = true;
request.Options.RecognizeAlternateCityNames = true;
request.Options.ReturnParsedElements = true;
//
request.AddressesToValidate = new AddressToValidate[2];
request.AddressesToValidate[0] = new AddressToValidate();
request.AddressesToValidate[0].AddressId = "Kimmel";
request.AddressesToValidate[0].Address = new Address();
request.AddressesToValidate[0].Address.StreetLines = new String[1] { "425 Morningside Dr" };
request.AddressesToValidate[0].Address.City = "Deerfield";
request.AddressesToValidate[0].Address.PostalCode = "53531";
request.AddressesToValidate[0].Address.CountryCode = "US";
//
request.AddressesToValidate[1] = new AddressToValidate();
request.AddressesToValidate[1].AddressId = "WD";
request.AddressesToValidate[1].Address = new Address();
request.AddressesToValidate[1].Address.StreetLines = new String[1] { "2830 Progress Rd" };
request.AddressesToValidate[1].Address.PostalCode = "53716";
request.AddressesToValidate[1].CompanyName = "Wingra Direct";
出站SOAP请求(使用Fiddler获得)。请注意缺少的选项:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<AddressValidationRequest xmlns="http://fedex.com/ws/addressvalidation/v2">
<WebAuthenticationDetail>
<UserCredential>
<Key>XXX-KEY-XXX</Key>
<Password>XXX-PWD-XXX</Password>
</UserCredential>
</WebAuthenticationDetail>
<ClientDetail>
<AccountNumber>XXX-ACCT#-XXX</AccountNumber>
<MeterNumber>XXX-MTR#-XXX</MeterNumber>
</ClientDetail>
<TransactionDetail>
<CustomerTransactionId>***Address Validation v2 Request using VC#***</CustomerTransactionId>
</TransactionDetail>
<Version>
<ServiceId>aval</ServiceId>
<Major>2</Major>
<Intermediate>0</Intermediate>
<Minor>0</Minor>
</Version>
<RequestTimestamp>2010-08-26T16:40:13.2026134-05:00</RequestTimestamp>
<Options>
<CheckResidentialStatus>true</CheckResidentialStatus>
<MaximumNumberOfMatches>5</MaximumNumberOfMatches>
</Options>
<AddressesToValidate>
<AddressId>Kimmel</AddressId>
<Address>
<StreetLines>425 Morningside Dr</StreetLines>
<City>Deerfield</City>
<PostalCode>53531</PostalCode>
<CountryCode>US</CountryCode>
<Residential>true</Residential>
</Address>
</AddressesToValidate>
<AddressesToValidate>
<AddressId>WD</AddressId>
<CompanyName>Wingra Direct</CompanyName>
<Address>
<StreetLines>2830 Progress Rd</StreetLines>
<PostalCode>53716</PostalCode>
</Address>
</AddressesToValidate>
</AddressValidationRequest>
</soap:Body>
</soap:Envelope>
XXX-KEY-XXX
XXX-PWD-XXX
XXX-ACCT#-XXX
XXX-MTR#-XXX
***使用VC处理验证v2请求#***
阿瓦尔
2.
0
0
2010-08-26T16:40:13.2026134-05:00
真的
5.
金梅尔
425晨赛德博士
迪尔菲尔德
53531
美国
真的
WD
温格拉直达酒店
进步路2830号
53716
我得到的答复是:
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<env:Header xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"/>
<soapenv:Body>
<v2:AddressValidationReply xmlns:v2="http://fedex.com/ws/addressvalidation/v2">
<v2:HighestSeverity>SUCCESS</v2:HighestSeverity>
<v2:Notifications>
<v2:Severity>SUCCESS</v2:Severity>
<v2:Source>wsi</v2:Source>
</v2:Notifications>
<v2:TransactionDetail xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<v2:CustomerTransactionId>***Address Validation v2 Request using VC#***</v2:CustomerTransactionId>
</v2:TransactionDetail>
<v2:Version xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<v2:ServiceId>aval</v2:ServiceId>
<v2:Major>2</v2:Major>
<v2:Intermediate>0</v2:Intermediate>
<v2:Minor>0</v2:Minor>
</v2:Version>
<v2:ReplyTimestamp>2010-08-26T21:40:14.140Z</v2:ReplyTimestamp>
<v2:AddressResults>
<v2:AddressId>Kimmel</v2:AddressId>
<v2:ProposedAddressDetails>
<v2:Score>93</v2:Score>
<v2:Changes>MODIFIED_TO_ACHIEVE_MATCH</v2:Changes>
<v2:ResidentialStatus>UNAVAILABLE</v2:ResidentialStatus>
<v2:DeliveryPointValidation>CONFIRMED</v2:DeliveryPointValidation>
<v2:Address>
<v2:StreetLines>425 Morningside Dr</v2:StreetLines>
<v2:City>Deerfield</v2:City>
<v2:StateOrProvinceCode>WI</v2:StateOrProvinceCode>
<v2:PostalCode>53531-9492</v2:PostalCode>
<v2:CountryCode>US</v2:CountryCode>
</v2:Address>
<v2:RemovedNonAddressData/>
</v2:ProposedAddressDetails>
</v2:AddressResults>
<v2:AddressResults>
<v2:AddressId>WD</v2:AddressId>
<v2:ProposedAddressDetails>
<v2:Score>93</v2:Score>
<v2:Changes>MODIFIED_TO_ACHIEVE_MATCH</v2:Changes>
<v2:ResidentialStatus>UNAVAILABLE</v2:ResidentialStatus>
<v2:DeliveryPointValidation>CONFIRMED</v2:DeliveryPointValidation>
<v2:CompanyName>Wingra Direct</v2:CompanyName>
<v2:Address>
<v2:StreetLines>2830 Progress Rd</v2:StreetLines>
<v2:City>Madison</v2:City>
<v2:StateOrProvinceCode>WI</v2:StateOrProvinceCode>
<v2:PostalCode>53716-3338</v2:PostalCode>
<v2:CountryCode>US</v2:CountryCode>
</v2:Address>
<v2:RemovedNonAddressData/>
</v2:ProposedAddressDetails>
</v2:AddressResults>
</v2:AddressValidationReply>
</soapenv:Body>
</soapenv:Envelope>
成功
成功
wsi
***使用VC处理验证v2请求#***
阿瓦尔
2.
0
0
2010-08-26T21:40:14.140Z
金梅尔
93
修改\u以实现\u匹配
不可用的
证实
425晨赛德博士
迪尔菲尔德
WI
53531-9492
美国
WD
93
修改\u以实现\u匹配
不可用的
证实
温格拉直达酒店
进步路2830号
麦迪逊
WI
53716-3338
美国
除非您也将optionSpecified标志设置为true,否则on选项似乎被忽略
这是我的新选项代码,可以使用-关键是您需要为所需的每个选项添加选项。(属性)specified=true:
request.Options = New AddressValidationOptions()
request.Options.CheckResidentialStatus = True
request.Options.CheckResidentialStatusSpecified = True
request.Options.VerifyAddresses = True
request.Options.VerifyAddressesSpecified = True
request.Options.MaximumNumberOfMatches = 5
request.Options.StreetAccuracy = AddressValidationAccuracyType.MEDIUM
request.Options.DirectionalAccuracy = AddressValidationAccuracyType.MEDIUM
request.Options.CompanyNameAccuracy = AddressValidationAccuracyType.MEDIUM
request.Options.ConvertToUpperCase = True
request.Options.ConvertToUpperCaseSpecified = True
request.Options.RecognizeAlternateCityNames = True
request.Options.RecognizeAlternateCityNamesSpecified = True
request.Options.ReturnParsedElements = True
request.Options.ReturnParsedElementsSpecified = True
我无法让API正常工作,因此我最终手动编写了SOAP请求和响应的处理代码。除了API没有正确设置所有标志外,我还发现FedEx DEV服务器没有返回居住状态,不管选项是什么(由我们的FedEx Web服务联系人确认)。当我们进入生产服务器时,新代码发挥了巨大的作用。这里是联邦快递技术支持的另一个答案: “测试中无法使用地址验证API 环境” 所以我不知道你是如何激活你的测试帐户来验证地址的。假设联邦快递系统使用USPS生产地址验证系统,这就是联邦快递测试环境无法访问该系统的原因
我不知道我是否100%相信这一点,但我知道我正在使用有效凭据访问联邦快递测试服务器,并得到“身份验证失败”响应 我本来会加一条评论的,但显然我的声誉水平不允许这样做,这是我唯一的选择。我刚刚找到了解决方案,将编辑我的答案,使其具有解决方案。已尝试添加request.Options.checkResidentialStatus指定,并且该标志至少正在传出SOAP请求中设置。这还会触发在SOAP响应中返回ProposedAddressDetails元素。不幸的是,我无法获得所有的居住状态。@山姆:刚刚在我的回答中添加了一些代码,也许这会澄清和帮助我。越来越近了。我得试试VB.Net版本,看看它是否有什么不同?我想知道我使用的是C#/VB.Net的快速版本,这一事实是否会对Web引用代码的生成方式产生影响?我很惊讶您能够在开发服务器上获得任何工作。我被告知,地址验证在测试服务器上不可用,在我进入生产服务之前,无法使用它执行任何操作