WCF Rest Webservice с потоком - PullRequest
       18

WCF Rest Webservice с потоком

8 голосов
/ 16 июня 2011

Я с интересом прочитал следующий пост, поскольку он является точной копией проблемы, с которой я сталкиваюсь (и которая сводит меня с ума) "Чтобы запрос операции UploadFile был потоком, операция должна иметь один параметр, тип которого - Stream."- http://social.msdn.microsoft.com/Forums/en/wcf/thread/80cd26eb-b7a6-4db6-9e6e-ba65b3095267

Я в значительной степени следовал всем кодам / примерам, которые нашел, и все еще не могу обойти эту ошибку - http://blogs.msdn.com/b/carlosfigueira/archive/2008/04/17/wcf-raw-programming-model-receiving-arbitrary-data.aspx

Все, чего я хотел бы добиться, - это опубликоватьизображение (jpeg / png) с устройства Android с использованием стандартного имени файла / параметров потока. Скорее всего, это нечто простое, что я неправильно настроил, неправильно понял или пропустил, но мне нужно решение для доказательства концепции.

 public interface IConXServer
    {
    [OperationContract]
    [WebInvoke(UriTemplate = "UploadImage({fileName})", Method="POST")]
    void UploadImage(string fileName, Stream imageStream);
    }

 public class ConXWCFServer : IConXServer
    {
    public void UploadImage(string fileName, Stream imageStream)
       {
       //implement image save
       }
    }

Настройки web.config ->

<standardEndpoints>
   <webHttpEndpoint>
       <standardEndpoint name="webHttpEndpoint" helpEnabled="false"/>
   </webHttpEndpoint>
</standardEndpoints>

<bindings>
    <webHttpBinding>
        <binding name="webHttpBinding" transferMode="Streamed"/>
    </webHttpBinding>
</bindings>

<behaviors>
    <endpointBehaviors>
        <behavior name="webHttpBehavior">
            <webHttp/>
        </behavior>
    </endpointBehaviors> 
    <serviceBehaviors>
        <behavior>
            <serviceMetadata httpGetEnabled="false"/>
            <serviceDebug includeExceptionDetailInFaults="true"/>
            <serviceThrottling maxConcurrentCalls="2147483647"  maxConcurrentSessions="2147483647"/>
        </behavior>
    </serviceBehaviors>
</behaviors>

Использование vs2010 и IIS Express.Если я закомментирую приведенный выше метод, все остальные методы будут работать и возвращать данные, а также запрос wsdl

С уважением и благодарностью Керн

1 Ответ

13 голосов
/ 16 июня 2011

Вы упоминаете WSDL, из-за чего я полагаю, что вы получаете сообщение об ошибке при попытке просмотреть конечную точку метаданных для службы. Итак, во-первых, WSDL и REST не сочетаются друг с другом, поэтому не следует ожидать, что они вообще будут использоваться для интерфейса REST. Забудьте, что концепция метаданных службы существует даже в мире REST.

Далее Хотя это правда, что webHttpBinding REST поддерживает параметры перед параметром тела потока, другие привязки - нет, и должен быть либо один параметр потока, либо контракт сообщения с заголовками и телом потока.

Итак, в конце концов, проблема не в REST webHttpBinding, я уверен, что он работает просто отлично. Если это не так, я был бы совершенно шокирован, потому что вы не делаете ничего, что не должно работать в этом отделе. Проблема в том, что вы ожидаете, что конечная точка метаданных сгенерирует WSDL для контракта на обслуживание, который вы определили, и это просто не поддерживается.

...