到目前为止,我很难让我的WCF Web服务输出一个没有运气的wsdl文件(它是空的?)。
svc文件:
<%@ ServiceHost Language="C#" Debug="true" Service="xxx.WCF.SubsetMID" CodeBehind="SubsetMID.svc.cs"
Factory="System.ServiceModel.Activation.WebServiceHostFactory"
%>
cs文件:
namespace xxx.WCF
{
[ServiceContract(Namespace = "SubsetMID")]
public interface ISubsetMID
{
[OperationContract]
[WebInvoke(BodyStyle=WebMessageBodyStyle.Wrapped)]
long[] GetMIDs(Guid guid, int subsetID);
}
[DataContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class SubsetMID : ISubsetMID
{
public long[] GetMIDs(Guid guid, int subsetID)
{
[...]
return returnValue;
}
}
}
我的网络配置文件:
<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
)时,我没有收到任何错误,但它只是一个空白页。
答案 0 :(得分:2)
以下是基于我所做的一些研究的最佳猜测 - 我对RESTful WCF服务并不熟悉,所以我可能错了,但至少应该给你一个起点。
您没有指定,但看起来您正在尝试编写RESTful WCF服务。我不完全确定,因为您在端点中使用wsHttpBinding
,但您还使用[WebInvoke]
修饰了服务中的方法。
无论如何,REST服务没有WSDL - 这是一个SOAP事物。另外,我相信WCF支持webHttpBinding
的REST。当您在.svc文件中使用WebServiceHostFactory
时,我认为这就是正在发生的事情:
您没有定义任何webHttpBinding
个端点。 WCF将创建一个默认的webHttpBinding
端点,其地址基于.svc文件的位置。但是,根据WebServiceHost Class:
...the WebServiceHost also disables the HTTP Help page and the Web Services Description Language (WSDL) GET functionality so the metadata endpoint does not interfere with the default HTTP endpoint.
如果您正在编写REST服务,那么您将不再需要WSDL。如果您计划使用SOAP服务,请在.svc文件中使用ServiceHostFactory
并从方法中删除[WebInvoke]
属性。
同样,这是一个(相对)受过教育的猜测,它可能是错误的,但它是一个开始的地方。
答案 1 :(得分:0)
我猜您正在使用包含svc文件的wcf服务网站项目。如果你不这样做,我强烈建议你这样做并将其设置为解决方案中的启动项目,这样你就可以正确调试它。对我来说,如果你按照codeproject一步一步的指示,对你也很有可能,问题是我没有从网站引用wcf服务,因此svc中的指令找不到服务。希望我帮助