Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 空/空WSDL文件_C#_Asp.net_Wcf - Fatal编程技术网

C# 空/空WSDL文件

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

我正在努力让我的WCFWeb服务输出一个wsdl文件,但到目前为止运气不佳(它是空的?)

svc文件:

<%@ 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>