Ссылка на службу: HTTP Status 404- Метаданные содержат ссылку, которая не может быть разрешена

#c# #web-services #soap #wsdl #soap-client

#c# #веб-службы #soap #wsdl #soap-клиент

Вопрос:

Я пытаюсь подключиться к общедоступному API-интерфейсу California tax rate в моем консольном приложении C # и получаю сообщение об ошибке ссылки на службу, приведенное ниже. Я успешно использую его около 9 месяцев. Я попытался воссоздать ссылку в новом приложении, но получил ту же ошибку. Я не уверен, какие шаги по устранению неполадок предпринять. Пожалуйста, дайте мне знать, если я могу предоставить более полезную информацию.

Служба находится здесь и является общедоступной для тестирования: http://services.gis.boe.ca.gov/api/taxrates/Rates.svc

Произошла ошибка загрузки ‘http://services.gis.boe.ca.gov/api/taxrates/Rates.svc /$метаданные’. Ошибка запроса со статусом HTTP 404: не найден. Метаданные содержат ссылку, которая не может быть разрешена: ‘http://services.gis.boe.ca.gov/api/taxrates/Rates.svc «. Сервер не предоставил значимого ответа; это может быть вызвано несоответствием контракта, преждевременным завершением сеанса или внутренней ошибкой сервера. Если служба определена в текущем решении, попробуйте создать решение и снова добавить ссылку на службу.

Ответ №1:

wsdl, который вы получаете от конечной точки, недействителен.

 <xs:element name="TestResponse">
  <xs:element minOccurs="0" maxOccurs="1" name="TestResult" type="xs:string"/>          
</xs:element>
  

должно быть

 <xs:element name="TestResponse">
    <xs:complexType>
        <xs:sequence>
            <xs:element minOccurs="0" maxOccurs="1" name="TestResult" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>
  

и то же самое для

 <xs:element name="GetRateResponse">
    <xs:element minOccurs="0" maxOccurs="1" name="GetRateResult" type="tns:CARateResponseCollection"/>
</xs:element>
  

также

 <wsdl:message name="ISoapService_Test_OutputMessage">
    <wsdl:part name="parameters" element="tns:String"/>
</wsdl:message>
  

должно быть

 <wsdl:message name="ISoapService_Test_OutputMessage">
  <wsdl:part name="parameters" element="tns:TestResponse"/>
</wsdl:message>
  

и последнее

 <wsdl:message name="ISoapService_GetRate_OutputMessage">
    <wsdl:part name="parameters" element="tns:CARateResponseCollection"/>
</wsdl:message>
  

должно быть

 <wsdl:message name="ISoapService_GetRate_OutputMessage">
        <wsdl:part name="parameters" element="tns:GetRateResponse/>
</wsdl:message>
  

Комментарии:

1. Блестяще! Но как мне решить это на клиенте? Или мне нужно, чтобы служба обновила WSDL?

2. wsdl необходимо обновить на стороне сервера, чтобы он был правильным. затем вам необходимо обновить клиент, используя новый wsdl для соответствия.