我想知道是否有人遇到过同样的错误,如果有的话,可以指出我正确的方向尝试修复它。错误如下:
值不能为空。参数名称:key。
似乎这个错误可能源于许多不同的事情。
我正在尝试将从CSV文件中读取的数据发送到SOAP Web服务。下面是我在脚本任务中使用的代码:
BasicHttpBinding CostCenterSoap = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
EndpointAddress remoteAddress = new EndpointAddress("https://example.com/services/CostCenter.asmx");
CostCenterSoapClient client = new CostCenterSoapClient(CostCenterSoap, remoteAddress);
CostCenterProperties[] costcenters = new CostCenterProperties[list.Count];
for (var c = 1; c < list.Count; c++) {
costcenters[c] = new CostCenterProperties
{
InteropID = list[c].CostCenter,
CompanyInteropID = companyInteropID,
Name = list[c].CostCenter,
Description = list[c].CostCenter
};
try
{
client.Save(CostCenters: costcenters, SharedSecret: sharedSecret);
}
catch (Exception e)
{
errorList.Add(e.Message);
MessageBox.Show("Errors from adding cost center: " + e.Message);
}
}
更令人困惑的是,这个相同的逻辑对另一个脚本任务中的另一个Web服务完全正常。使用SoapUI进行测试时,我可以很好地将数据传递给Web服务,因此问题必须存在于我的脚本中。
StackTrace中的错误截图:
这是我的app.config文件,它是我的脚本任务的一部分:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.net>
<defaultProxy useDefaultCredentials="true">
<proxy usesystemdefault="True" bypassonlocal="True"/>
</defaultProxy>
</system.net>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="CostCenterSoap">
<security mode="Transport" />
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="https://www.example.com/services/CostCenter.asmx"
binding="basicHttpBinding" bindingConfiguration="CostCenterSoap"
contract="CostCenterService.CostCenterSoap" name="CostCenterSoap" />
</client>
</system.serviceModel>
</configuration>