空/空WSDL文件

时间:2013-07-04 08:49:40

标签: c# asp.net wcf

到目前为止,我很难让我的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)时,我没有收到任何错误,但它只是一个空白页。

2 个答案:

答案 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中的指令找不到服务。希望我帮助