Don';无法理解Soap调用引发的错误


Don't understand error thrown by Soap call

我正在尝试使用freightquote.com的API。为此,我使用了一个扩展SOAP的类,您可以在这里看到&lt--向作者致敬。我用来打电话的代码可以在下面找到

$this->load->library('QuoteService');
    try
    {
        $client = new QuoteService();
        $user = new UserCredential();
        $user->Name = 'example@example.com';
        $user->Password = 'password';
        $add = new PostalAddress();
        $add->AddressName = 'home';
        $add->City = 'Fond du Lac';
        $add->PostalCode = '54922';
        $add->StateCode = 'WI';
        $add->StreetAddress = 'W4709 Main St.';
        $add->CountryCode = 'US';           
        $loc = new Location();
        $loc->HasLoadingDock = 1;
        $loc2->LocationType = LocationTypeList::Origin;
        $loc->HasDeliveryAppointment = 1;
        $loc->LocationAddress = $add;
        $add2 = new PostalAddress();
        $add2->AddressName = 'dropoff';
        $add2->City = 'Oshkosh';
        $add2->PostalCode = '54901';
        $add2->StateCode = 'WI';
        $add2->StreetAddress = '424 Washington Ave.';
        $add2->CountryCode = 'US';

        $loc2 = new Location();
        $loc2->LocationType = LocationTypeList::Destination;
        $loc2->HasDeliveryAppointment = 1;
        $loc2->LocationAddress = $add2;
        // comment
        $prod = new Product();
        $prod->IsHazardousMaterial = 0;
        $prod->Length = 50;
        $prod->Width = 50;
        $prod->Height = 50;
        $prod->PieceCount = 10;
        $prod->ProductDescription = "Stones";
        $prod->PackageType = 'unknown';

        $ship = new Shipment();
        $ship->PickupDate = '2010-09-13T00:00:00';
        $ship->ShipmentLocations = array($add,$add2);
        $ship->IsBlind = 0;
        $ship->ShipmentProducts = array($prod);

        $quote_request = new QuoteRequest();
        $quote_request->QuoteType = QuoteTypeList::B2B;
        $quote_request->ServiceType = ServiceTypeList::Truckload;
        $quote_request->QuoteShipment = $ship;
        $quote_request->CustomerId = 0;
        $request = new GetRatingEngineQuote();
        $request->request = $quote_request;
        $request->user = $user;
        $response = $client->GetRatingEngineQuote($request);

当我尝试运行此代码时,我得到以下错误

Soap错误System.Web.Services.Protocols.SoapException:服务器无法读取请求。>--->System.InvalidOperationException:XML文档(2458)中存在错误。--->>System.FormatException:字符串"不是有效的布尔值。位于>Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read15_Shipment(Bool>ean isNullable,布尔检查类型)>Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read42_GetRatingEngi>neQuote()位于>Microsoft.Xml.Sserialization.GneratedAssembly.ArrayOfObjectSerializer.Deserialize(XmlSeria>lizationReader读取器)位于System.Xml.Serilization.XmlSerializer.DeserializeSystem.Web.Services.Protocols.SoapServerProtocol.ReadParameters()--->处的System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader>XmlReader,String-encodingStyle,XmlDeserializationEvents事件)>System.Web.Services.Protocols.SoapServerProtocols.ReadParameters(),位于>System.Web.Services.Trotocols.WebServiceHandler.CoreProcessRequest()

我很难弄清楚这个错误是意味着它缺少了一个必需的参数,还是只是接收到了错误的数据类型。我们将非常感谢您对故障排除方法、错误的确切含义,甚至解决方案的任何帮助。

你能更改吗

$response = $client->GetRatingEngineQuote($request);

try {
    $response = $client->GetRatingEngineQuote($request);
} catch ('Exception $e) {
    var_dump($client->__getLastRequest());
}

并且提供输出或者转到第二行到字符458并进行检查。

方法$client->__getLastRequest()要求使用trace=>true选项创建客户端。