svcutil не создает конфигурационный файл - PullRequest
7 голосов
/ 08 июля 2011

У меня есть сервис 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 Ответ

9 голосов
/ 08 июля 2011

Конечные точки, которые используют привязку WebHttpBinding (a.k.a., конечные точки WCF WebHttp), не предоставляют метаданные, как это делают конечные точки «нормальной» (т.е. SOAP). WCF будет по-прежнему генерировать WSDL для вашей службы (поскольку вы указали <serviceMetadata httpGetEnabled="true"/>), но метаданные будут содержать только определенные аспекты службы (например, контракты на данные и т. Д.). Веб-функции (атрибуты WebInvoke / WebGet) не будут присутствовать на прокси-сервере, поэтому, даже если вы получите файл прокси, вы, скорее всего, не сможете использовать его для связи со службой (если вы не сделали этого). не использовать любой из них). Проблема в том, что нет общепринятого формата описания метаданных для служб REST (WADL, возможно, наиболее часто используется, но он не так распространен, как WSDL для SOAP, и он не реализован WCF).

Вкратце: svcutil на самом деле не работает для конечных точек сети.

Если вы хотите длинную версию: 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

...