WCF - 自动生成的WSDL无法正常工作

时间:2014-03-07 09:48:08

标签: c# .net wcf wsdl svcutil.exe

我有一个WCF服务MyService.svc,托管在IIS 7中。服务配置如下:

<system.serviceModel>
  <services>
      <service name="MyService">
          <endpoint address="" binding="basicHttpBinding" contract="MyPortType"></endpoint>
      </service>
  </services>
  <behaviors>
      <serviceBehaviors>
          <behavior name="defaultBehaviour">
              <serviceMetadata httpGetEnabled="true"  />
              <serviceDebug includeExceptionDetailInFaults="true" />
          </behavior>
      </serviceBehaviors>
  </behaviors>
</system.serviceModel>

问题是,我的服务不提供自动生成的WSDL(将wsdl添加到服务的URL),尽管事实上我包含了标记

 <serviceMetadata httpGetEnabled="true"  />

如果我尝试通过SoapUI调用它,服务本身就可以了。当我尝试访问WSDL时,我得到HTTP错误400而没有响应的WSDL。

重要的是要注意我使用.NET 3.5和Visual Studio 2008是出于遗留原因(它是一个旧的应用程序)。使用VS2008中的svcutil.exe通过命令行生成数据协定。当我在VS 2013 / .NET 4.5(使用VS2013中的svcutil.exe重新生成数据协定类)下尝试相同的服务和相同配置时,自动生成的WSDL显示没有问题。

如何在.NET 3.5 / VS2008下运行自动生成的WSDL?

谢谢你, 米甲

2 个答案:

答案 0 :(得分:1)

将元数据端点添加到服务

<services>
      <service name="MyService">
          <endpoint address="" binding="basicHttpBinding" contract="MyPortType"></endpoint>
     <endpoint address=”mex” binding=”mexHttpBinding” contract=”IMetadataExchange”/>
   </service>
</services>

答案 1 :(得分:0)

如果删除行为名称,则应该将其取出。

   <serviceBehaviors>
      <behavior name="defaultBehaviour">
          <serviceMetadata httpGetEnabled="true"  />
          <serviceDebug includeExceptionDetailInFaults="true" />
      </behavior>
  </serviceBehaviors>

      <serviceBehaviors>
      <behavior>
          <serviceMetadata httpGetEnabled="true"  />
          <serviceDebug includeExceptionDetailInFaults="true" />
      </behavior>
  </serviceBehaviors>