Web サービスを呼び出したい。また、Web サービスにはいくつかの complextype 要素が含まれています。ASP.NET と soapUI で良い結果が得られています。しかし、PHP でエラーが発生します。私は理解できませんでした。
それで、私を助けてもらえますか?
ありがとう。
呼び出したい関数:
<xs:element name="GetHotelSearch">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="searchClass" nillable="true" type="q13:HotelSearch" xmlns:q13="http://schemas.datacontract.org/2004/07/Model"/>
<xs:element minOccurs="0" name="recorCount" type="xs:int"/>
<xs:element minOccurs="0" name="sortType" type="q14:SortType" xmlns:q14="http://schemas.datacontract.org/2004/07/Model"/>
<xs:element minOccurs="0" name="sortFields" nillable="true" type="q15:ArrayOfSortField" xmlns:q15="http://schemas.datacontract.org/2004/07/Model"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetHotelSearchResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="GetHotelSearchResult" nillable="true" type="q16:ArrayOfHotelSummary" xmlns:q16="http://schemas.datacontract.org/2004/07/Model"/>
<xs:element minOccurs="0" name="recorCount" type="xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:element>
複合型:
<xs:complexType name="HotelSearch">
<xs:sequence>
<xs:element minOccurs="0" name="BRANCHID" type="xs:int"/>
<xs:element minOccurs="0" name="UNIQUECODE" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="SortType">
<xs:restriction base="xs:string">
<xs:enumeration value="Ascending">
<xs:annotation>
<xs:appinfo>
<EnumerationValue xmlns="http://schemas.microsoft.com/2003/10/Serialization/">1</EnumerationValue>
</xs:appinfo>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="Descending">
<xs:annotation>
<xs:appinfo>
<EnumerationValue xmlns="http://schemas.microsoft.com/2003/10/Serialization/">2</EnumerationValue>
</xs:appinfo>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
<xs:element name="SortType" nillable="true" type="tns:SortType"/>
<xs:complexType name="ArrayOfSortField">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="SortField" type="tns:SortField"/>
</xs:sequence>
</xs:complexType>
<xs:element name="ArrayOfSortField" nillable="true" type="tns:ArrayOfSortField"/>
<xs:simpleType name="SortField">
<xs:restriction base="xs:string">
<xs:enumeration value="PENSIONTYPENAME">
<xs:annotation>
<xs:appinfo>
<EnumerationValue xmlns="http://schemas.microsoft.com/2003/10/Serialization/">1</EnumerationValue>
</xs:appinfo>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="HOTELNAME">
<xs:annotation>
<xs:appinfo>
<EnumerationValue xmlns="http://schemas.microsoft.com/2003/10/Serialization/">2</EnumerationValue>
</xs:appinfo>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
<xs:element name="SortField" nillable="true" type="tns:SortField"/>
.NET コード (動作しています):
int _recordCount = 10;
List<HotelSummary> hotels = hc.GetHotelSearch(new HotelSearch()
{
BRANCHID = 000,
UNIQUECODE = "YIO"
}, ref _recordCount, SortType.Ascending, new SortField[] { SortField.HOTELNAME }).ToList();
XML (soapUI で動作):
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:mod="http://schemas.datacontract.org/2004/07/Model">
<soapenv:Header/>
<soapenv:Body>
<tem:GetHotelSearch>
<tem:searchClass>
<mod:BRANCHID>000</mod:BRANCHID>
<mod:UNIQUECODE>YIO</mod:UNIQUECODE>
</tem:searchClass>
<tem:recorCount>10</tem:recorCount>
<tem:sortType>Ascending</tem:sortType>
<tem:sortFields>
<mod:SortField>HOTELNAME</mod:SortField>
</tem:sortFields>
</tem:GetHotelSearch>
</soapenv:Body>
</soapenv:Envelope>
そしてPHPコード(それは機能していません):
ini_set("soap.wsdl_cache_enabled", "0");
$url='http://localhost/Service/Service.svc?wsdl';
$client = new SoapClient($url);
$HotelSearch= array('BRANCHID' => 000,'UNIQUECODE' => 'YIO');
$SortField= array('SortField' => 'HOTELNAME');
$result = $client->GetHotelSearch($HotelSearch, 10, 'Ascending', $SortField);
$array = $result->GetHotelSearchResult->HotelSummary;
次のエラーが表示されます。
Fatal error: Uncaught SoapFault exception: [a:InternalServiceFault] End element 'Body' from namespace 'http://schemas.xmlsoap.org/soap/envelope/' expected. Found element 'param1' from namespace ''. Line 2, position 155. in D:\[.Projeler]\musteri\webservis\test.php:98 Stack trace: #0 D:\[.Projeler]\musteri\webservis\test.php(98): SoapClient->__call('GetHotelSearch', Array) #1 D:\[.Projeler]\musteri\webservis\test.php(98): SoapClient->GetHotelSearch(Array, 10, 'Ascending', Object(stdClass)) #2 {main} thrown in D:\[.Projeler]\musteri\webservis\test.php on line 98
トライアンドキャッチで:
End element 'Body' from namespace 'http://schemas.xmlsoap.org/soap/envelope/' expected. Found element 'param1' from namespace ''. Line 2, position 155.