Я пытаюсь создать веб-сервис с использованием WCF.Поскольку в конечном итоге служба будет использоваться не на языках .NET, я пытаюсь протестировать ее, используя «Добавить веб-ссылку» или WSDL.exe вместо svcutil.Я получаю следующие ошибки:
Из WSDL.exe - ошибка: невозможно импортировать привязку BasicHttpBinding_IEchoService из пространства имен http://tempuri.org. - - невозможно импортировать эхо операции.- - Элемент http://tempuri.org/:Echo отсутствует.
Из справочника добавления службы и справки веб-добавления: метаданные содержат ссылку, которую невозможно разрешить: ссылка на wsdl .Документ WSDL содержит ссылки, которые не могут быть разрешены.Произошла ошибка при загрузке http://localhost:8080/EchoService.svc?xsd=xsd0 Основное соединение было закрыто.
Этот упрощенный пример имеет ту же проблему, что и основная служба.
Вот Web.Config службы:
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="EchoBehaviorConfiguration">
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
<services>
<service name="EchoService">
<endpoint address=""
behaviorConfiguration="EchoBehaviorConfiguration"
binding="basicHttpBinding"
contract="IEchoService" />
<endpoint address="mex" contract="IMetadataExchange" binding="mexHttpBinding" />
</service>
</services>
<bindings>
<basicHttpBinding>
</basicHttpBinding>
<mexHttpBinding></mexHttpBinding>
</bindings>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
Вот контракт / интерфейс:
[ServiceContract]
public interface IEchoService
{
[OperationContract]
string Echo(string message);
}
А вот WSDL, который генерируется:
<wsdl:definitions name="EchoService" targetNamespace="http://tempuri.org/">
<wsdl:types>
<xsd:schema targetNamespace="http://tempuri.org/Imports">
<xsd:import schemaLocation="http://localhost:8080/EchoService.svc?xsd=xsd0" namespace="http://tempuri.org/"/>
<xsd:import schemaLocation="http://localhost:8080/EchoService.svc?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/"/>
</xsd:schema>
</wsdl:types>
<wsdl:message name="IEchoService_Echo_InputMessage">
<wsdl:part name="parameters" element="tns:Echo"/>
</wsdl:message>
<wsdl:message name="IEchoService_Echo_OutputMessage">
<wsdl:part name="parameters" element="tns:EchoResponse"/>
</wsdl:message>
<wsdl:portType name="IEchoService">
<wsdl:operation name="Echo">
<wsdl:input wsaw:Action="http://tempuri.org/IEchoService/Echo" message="tns:IEchoService_Echo_InputMessage"/>
<wsdl:output wsaw:Action="http://tempuri.org/IEchoService/EchoResponse" message="tns:IEchoService_Echo_OutputMessage"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="BasicHttpBinding_IEchoService" type="tns:IEchoService">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="Echo">
<soap:operation soapAction="http://tempuri.org/IEchoService/Echo" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="EchoService">
<wsdl:port name="BasicHttpBinding_IEchoService" binding="tns:BasicHttpBinding_IEchoService">
<soap:address location="http://localhost:8080/EchoService.svc"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Служба в настоящее время размещается локально через IIS7.Я попытался и HTTP и HTTPS и имею ту же самую проблему.Если я попытаюсь изменить привязку с basicHttpBinding на webHttpBinding, в WSDL ничего не изменится.
Есть идеи, где я ошибаюсь?
ОБНОВЛЕНИЕ: У меня сейчас настроена конфигурация, что еслислужба работает под управлением Cassini вместо IIS, я могу добавить ссылку на службу или веб-страницу в мой тестовый проект.Я не могу сохранить wsdl и использовать WSDL.exe для генерации прокси-классов.
Так что теперь у меня есть 3 проблемы:
Кромеделает aspnet_regiis для установки и регистрации WCF 4 в IIS. Могу ли я что-нибудь еще сделать?
Есть идеи, что мне нужно сделать, чтобы заставить его работать с WSDL.exe?
После выполнения службы ASMX и сравнения сгенерированных WSDL они существенно отличаются, что заставляет меня задуматься о том, насколько совместима WCF на данном этапе с языками, отличными от .NET.