0

我正在努力让我的 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但这只是一个空白页面。

4

2 回答 2

2

以下是基于我所做的一些研究的最佳猜测 - 我对 RESTful WCF 服务不太熟悉,所以我可能错了,但这至少应该给你一个起点。

您没有指定,但看起来您正在尝试编写 RESTful WCF 服务。我不完全确定,因为您wsHttpBinding在端点中使用,但您也在服务中使用[WebInvoke].

无论如何,REST 服务没有 WSDL——这是 SOAP 的事情。此外,我相信 WCF 通过webHttpBinding. 当您WebServiceHostFactory在 .svc 文件中使用时,我认为这是正在发生的事情:

您没有webHttpBinding定义任何端点。WCF 将创建一个默认webHttpBinding终结点,其地址基于 .svc 文件的位置。但是,当根据WebServiceHost 类使用默认端点时:

...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 服务,ServiceHostFactory请在 .svc 文件中使用并[WebInvoke]从方法中删除该属性。

同样,这是一个(相对)有根据的猜测,它可能是错误的,但它是一个开始的地方。

于 2013-07-04T09:35:03.997 回答
0

我猜您正在使用包含 svc 文件的 wcf 服务网站项目。如果您不这样做,我强烈建议您这样做并将其设置为解决方案中的启动项目,以便您可以正确调试它。对我来说,如果你按照 codeproject 一步一步的说明进行操作,那么对你来说也很有可能,问题是我没有从网站上引用 wcf 服务,因此 svc 中的指令找不到该服务。希望我有帮助

于 2013-08-10T16:01:49.837 回答