Svcutil无法生成配置文件

7

我有一个 WCF 服务。我尝试通过 svcutil 来生成客户端程序的代理代码和配置文件:

svcutil http://localhost/WcfService2/Files.svc

我得到了带有代理的有效文件,但没有得到配置文件。为什么呢? (VS2010 SP1,.NET 4.0,IIS 7.0)

我的服务合同:

[ServiceContract]
public interface IFiles
{
    [OperationContract]
    Guid UploadFile(Stream stream);
}

我的网站配置:

<?xml version="1.0"?>
<configuration>

  <system.serviceModel>
    <bindings>
      <webHttpBinding>
        <binding name="WebHttpBinding" maxBufferSize="65536" maxBufferPoolSize="524288"
          maxReceivedMessageSize="1073741824" transferMode="Streamed" />
      </webHttpBinding>
    </bindings>
    <services>
      <service behaviorConfiguration="MyServiceBehavior" name="WcfService2.Files">
        <endpoint behaviorConfiguration="WebHttpBehavior" binding="webHttpBinding"
          bindingConfiguration="WebHttpBinding" name="Files" contract="WcfService2.IFiles" />
      </service>
    </services>
    <behaviors>
      <endpointBehaviors>
        <behavior name="WebHttpBehavior">
          <webHttp defaultBodyStyle="Wrapped" defaultOutgoingResponseFormat="Json"
            automaticFormatSelectionEnabled="false" />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="MyServiceBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
  <system.web>
    <httpRuntime maxRequestLength="100000" />
  </system.web>

</configuration>
1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
9
使用WebHttpBinding(也称为WCF WebHttp终结点)的终结点不像“普通”(即SOAP)终结点一样公开元数据。 WCF仍将为您的服务生成WSDL(因为您指定了<serviceMetadata httpGetEnabled="true"/>),但元数据仅包含服务的某些方面(例如数据契约等)。 Web相关功能(WebInvoke / WebGet属性)不会出现在代理上,因此即使您获得代理文件,您可能也无法使用它与服务进行通信(除非您没有使用其中任何一个)。 问题在于,没有广泛接受的格式用于描述REST服务的元数据(WADL可能是最常用的,但它远不如SOAP的WSDL普及,并且WCF未实现它)。 简而言之:svcutil对Web终结点不起作用。 如果您想要详细了解,请访问以下链接:http://blogs.msdn.com/b/carlosfigueira/archive/2012/03/26/mixing-add-service-reference-and-wcf-web-http-a-k-a-rest-endpoint-does-not-work.aspx

这不是真的。我试图在家里创建一个简单的项目(使用VS2008,.NET 3.5)。服务端点使用webHttpBinding和webHttp behavior元素进行配置。命令svcutil.exe http://localhost:3065/Service1.svc?wsdl获取了代理和配置文件。 - vpp
检查配置文件中使用的绑定 - 它不会是webHttpBinding。你可能正在访问服务上的一些默认端点。 - carlosfigueira
该服务只有一个端点。svcutil 为客户端创建了一个基础,通过 SOAP(messageVersion="Soap12" of textMessageEncoding of customBinding)访问端点。并且在配置文件中进行了描述。第一个示例根本没有这个。 - vpp
svcutil生成的内容并不等同于webHttpBinding(webHttpBinding是没有SOAP版本的,相当于messageVersion.None)。svcutil为服务上存在的另一个端点创建客户端配置,而不是具有webHttpBinding / webHttp行为的端点。 WebHttpBinding端点在WSDL /元数据中不会公开,而这正是svcutil所使用的。 - carlosfigueira
1
@carlosfigueira 如果 svcutil 无法创建 .config 文件,我该如何更改 app.config 才能找到 WCF 的终结点?我收到的错误是:无法找到引用合同的默认终结点元素.....敬礼 - Guillermo Varini
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,