2011-07-08 70 views
6

我有wcf服務。我試圖通過SvcUtil工具來生成客戶端程序代理代碼和配置文件:svcutil不生成配置文件

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

我使用代理有效的文件,但沒有得到配置文件。爲什麼? (VS2010 SP1,.NET 4.0,IIS 7.0)

我的服務合同:

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

我的web配置:它使用的WebHttpBinding

<?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> 

回答

8

端點(又名,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

+0

這是不正確的。我試圖在家裏做一個簡單的項目(在VS2008,.NET 3.5下)。服務端點使用webHttpBinding和webHttp行爲元素進行配置。命令svcutil.exe http:// localhost:3065/Service1.svc?wsdl同時獲得代理和配置文件。 – vpp

+0

檢查配置文件中使用的綁定 - 它不會是webHttpBinding。您可能正在訪問服務上的某個默認端點。 – carlosfigueira

+0

該服務只有一個端點。 svcutil爲客戶端通過SOAP(messageVersion =「soap12」,customBinding的textMessageEncoding)訪問端點奠定了基礎。它在配置文件中描述。第一個樣品根本沒有。 – vpp