我正在尝试使用WCF构建Web服务。由于该服务最终将被非.NET语言使用,因此我一直尝试使用“添加Web引用”或使用wsdl.exe而不是svcutil方法来测试它。不过,我发现了以下错误:
来自WSDL.exe
-错误:无法从命名空间导入绑定basichttpbinding\u iechoservice
http://tempuri.org
.
--无法导入操作echo。
-元素
http://tempuri.org/:Echo
遗失了。
从添加服务引用和添加Web引用:
元数据包含无法解析的引用:
链接到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下运行的,我可以向我的测试项目添加服务或Web引用。我
不能
但是,保存WSDL并使用wsdl.exe生成代理类。
所以现在我有三个问题:
-
除了通过aspnet注册在IIS上安装和注册wcf 4之外,我还需要做什么?
-
知道我需要做什么才能让它与wsdl.exe一起工作吗?
-
在做了一个asmx服务并比较了生成的wsdl之后,它们有着显著的不同,这让我怀疑目前wcf与非.NET语言的兼容性如何。