Как я могу заставить WCF взаимодействовать с этой веб-службой?

Это продолжение этого вопроса.

Как было предложено здесь @Benjamin, я Я пытаюсь добавить ссылку на службу для моего wsdl сейчас (вместо веб-ссылки). Вот URL-адрес рассматриваемого wsdl:

https://eu.link.fiatauto.com/tsi/DDUWsAut.php?wsdl

Проблема в том, что Visual Studio генерирует пустой файл кода:

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:2.0.50727.3603
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace test.ServiceReference1 {

}

Когда я пытаюсь вручную сгенерировать код с помощью svcutil, я получаю следующее:

C:\temp>svcutil https://eu.link.fiatauto.com/tsi/DDUWsAut.php?wsdl
Microsoft (R) Service Model Metadata Tool
[Microsoft (R) Windows (R) Communication Foundation, Version 3.0.4506.2152]
Copyright (c) Microsoft Corporation.  All rights reserved.

Attempting to download metadata from 'https://eu.link.fiatauto.com/tsi/DDUWsAut.
php?wsdl' using WS-Metadata Exchange or DISCO.
Error: Cannot import wsdl:portType
Detail: An exception was thrown while running a WSDL import extension: System.Se
rviceModel.Description.XmlSerializerMessageContractImporter
Error: The ' ' character, hexadecimal value 0x20, cannot be included in a name.
Parameter name: name
XPath to Error Source: //wsdl:definitions[@targetNamespace='urn:ddu']/wsdl:portT
ype[@name='dduPortType']


Error: Cannot import wsdl:binding
Detail: There was an error importing a wsdl:portType that the wsdl:binding is de
pendent on.
XPath to wsdl:portType: //wsdl:definitions[@targetNamespace='urn:ddu']/wsdl:port
Type[@name='dduPortType']
XPath to Error Source: //wsdl:definitions[@targetNamespace='urn:ddu']/wsdl:bindi
ng[@name='dduBinding']


Error: Cannot import wsdl:port
Detail: There was an error importing a wsdl:binding that the wsdl:port is depend
ent on.
XPath to wsdl:binding: //wsdl:definitions[@targetNamespace='urn:ddu']/wsdl:bindi
ng[@name='dduBinding']
XPath to Error Source: //wsdl:definitions[@targetNamespace='urn:ddu']/wsdl:servi
ce[@name='ddu']/wsdl:port[@name='dduPort']


Generating files...
Warning: No code was generated.
If you were trying to generate a client, this could be because the metadata docu
ments did not contain any valid contracts or services
or because all contracts/services were discovered to exist in /reference assembl
ies. Verify that you passed all the metadata documents to the tool.

Warning: If you would like to generate data contracts from schemas make sure to
use the /dataContractOnly option.

Возможно, это также как-то связано с тем фактом, что при попытке использовать службу возникают проблемы путем добавления веб-ссылки вместо ссылки на службу (см. Мой другой вопрос)?

Я думаю, что с этим wsdl что-то не так, но я не могу найти, что именно.

Поскольку это сторонняя служба, которая уже используется другими, я не думаю, что они захотят изменить свою службу, поэтому есть ли какие-либо обходные пути, позволяющие .NET взаимодействовать с этой веб-службой?


person fretje    schedule 23.12.2009    source источник
comment
Своеобразный. soapclient.com/soaptest.html отлично работает с этим WSDL. Я предполагаю, что что-то где-то возражает против этого тега ‹documentation›?   -  person Jeremy McGee    schedule 23.12.2009
comment
Если вы внимательно посмотрите (просмотреть исходный код), сообщения с дополнительным пробелом покажут пробел.   -  person smaclell    schedule 23.12.2009


Ответы (2)


В WSDL есть ошибка. Последняя часть сообщения dduAbortRequest имеет пробел в конце имени. Наверное, это просто ошибка. Расскажите им об этом, и они исправят это, и они будут вам благодарны за то, что рассказали им.

WSDL просто недействителен как есть.

<message name="dduAbortRequest">
    <part name="Ticket" type="xsd:string"/>
    <part name="ServiceId" type="xsd:string"/>
    <part name="LoginId" type="xsd:string"/>
    <part name="DocId " type="xsd:string"/> <!-- Should be "DocId" -->
</message>
person John Saunders    schedule 23.12.2009
comment
Блин, я действительно искал что-то подобное в файле, но не нашел, спасибо! - person fretje; 23.12.2009
comment
Также проблема с сообщением dduRollbackRequest. Если вы откроете конечную точку напрямую с помощью IE, вы не увидите этой проблемы. - person smaclell; 23.12.2009
comment
Да, действительно, я сохранил файл и удалил пробелы, и теперь svcutil отлично генерирует код. Мне нужно будет завтра проверить на работе, решит ли это другую проблему (метод dduLogin == ›stackoverflow.com/questions/1953132/). Буду держать вас в курсе ;-) - person fretje; 23.12.2009
comment
Я заставил его работать после того, как я реализовал свой собственный Custom TextMessageEncoder (очевидно, кодировка службы была ISO-8859-1). Тем не менее, мне интересно решение другого моего вопроса (stackoverflow.com/questions/1953132/). - person fretje; 28.12.2009

Отказ от ответственности: это, вероятно, не прямой ответ на ваш вопрос, НО я просто потратил 3 часа, пытаясь исправить это же сообщение об ошибке, поэтому я тоже хочу опубликовать это здесь.


Это сообщение об ошибке Warning: No code was generated также может быть вызвано отсутствием разрешений для пользователя пула приложений в каталоге C:\Windows\Temp (да, действительно!).

Если вы получаете эту ошибку, я сначала предлагаю вам переключиться в командную строку, если вы пытаетесь использовать диалоговое окно «Добавить ссылку на службу». Выполните эту команду, открыв Fiddler для URL-адреса вашей службы.

 svcutil.exe https://dev.example.com/ShoppingCartWS/WCF/ShoppingCartWCF.svc?wsdl

Если вы видите, что какой-либо из запросов возвращается как 500 (красный) и следующий ответ:

ReadResponse() failed: The server did not return a response for this request.                                                                            

Затем отметьте C:\Windows\Temp и просто добавьте любого пользователя, у которого работает пул приложений, для получения разрешений.

Вот где я нашел решение - большое спасибо!.

person Simon_Weaver    schedule 17.09.2010