C# 空/空WSDL文件
我正在努力让我的WCFWeb服务输出一个wsdl文件,但到目前为止运气不佳(它是空的?) svc文件:C# 空/空WSDL文件,c#,asp.net,wcf,C#,Asp.net,Wcf,我正在努力让我的WCFWeb服务输出一个wsdl文件,但到目前为止运气不佳(它是空的?) svc文件: <%@ ServiceHost Language="C#" Debug="true" Service="xxx.WCF.SubsetMID" CodeBehind="SubsetMID.svc.cs" Factory="System.ServiceModel.Activation.WebServiceHostFactory" %> 我的web配置文件: <system.se
<%@ ServiceHost Language="C#" Debug="true" Service="xxx.WCF.SubsetMID" CodeBehind="SubsetMID.svc.cs"
Factory="System.ServiceModel.Activation.WebServiceHostFactory"
%>
我的web配置文件:
<system.serviceModel>
<services>
<service name="xxx.WCF.SubsetMID">
<endpoint address=""
binding="wsHttpBinding"
contract="xxx.WCF.ISubsetMID" />
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment
multipleSiteBindingsEnabled="true"
aspNetCompatibilityEnabled="true"
/>
</system.serviceModel>
我在访问wsd时没有收到任何错误(
http://.../SubsetMID.svc?wsdl
)但这只是一个空白页。以下是基于我所做的一些研究的最佳猜测-我对RESTful WCF服务不太熟悉,所以我可能是错的,但这至少应该给你一个起点
您没有指定,但看起来您正在尝试编写RESTful WCF服务。我不完全确定,因为您在端点中使用了wsHttpBinding
,但您也用[WebInvoke]
装饰了服务中的方法
在任何情况下,REST服务都没有WSDL——这是SOAP的事情。此外,我相信WCF通过webHttpBinding
支持REST。当您在.svc文件中使用WebServiceHostFactory
时,我认为发生了这样的情况:
您没有定义任何webHttpBinding
端点。WCF将创建一个默认的webHttpBinding
端点,地址基于.svc文件的位置。但是,当根据以下条件使用默认端点时:
…WebServiceHost还禁用HTTP帮助页和Web服务描述语言(WSDL)获取功能,以便元数据端点不会干扰默认HTTP端点。
如果您正在编写REST服务,则不需要WSDL。如果您计划使用SOAP服务,则在.svc文件中使用ServiceHostFactory
,并从方法中删除[WebInvoke]
属性
同样,这是一个(相对)有根据的猜测,可能是错误的,但这是一个开始。我猜您正在使用一个包含svc文件的wcf服务网站项目。如果您不这样做,我强烈建议您这样做,并将其设置为解决方案中的启动项目,以便您能够正确地调试它。对我来说,如果您遵循codeproject的一步一步的说明,那么问题是我没有从网站上引用wcf服务,因此svc中的指令找不到服务,这也是一个很好的机会。希望我帮了忙我真的不想让我的服务变成休息。我想要的只是一种发布它的方式,并且有一种在新项目中引用它的简单方式。哈拉斯,我在互联网上能读到的都是关于自托管WCF服务的,谷歌甚至把“svc”翻译成“WCF”,这让搜索变得非常困难(然后,将.svc文件标记更改为使用
ServiceHostFactory
,并删除服务方法上的[WebInvoke]
属性,应该会对您有所帮助。祝您编码愉快!
<system.serviceModel>
<services>
<service name="xxx.WCF.SubsetMID">
<endpoint address=""
binding="wsHttpBinding"
contract="xxx.WCF.ISubsetMID" />
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment
multipleSiteBindingsEnabled="true"
aspNetCompatibilityEnabled="true"
/>
</system.serviceModel>