Служба WCF для приема зашифрованных данных/данных

Кто-нибудь знает или еще лучше имеет пример службы WCF, которая примет форму post encoded multipart/form-data ie. загрузка файла с веб-страницы?

В google появилось пустое.

Ta, Ant

Ответ 1

Итак, здесь идет...

Создайте свой контракт на обслуживание, который выполняет операцию, которая принимает поток для своего единственного параметра, украшает WebInvoke, как показано ниже

[ServiceContract]
public interface IService1 {

    [OperationContract]
    [WebInvoke(
        Method = "POST",
        BodyStyle = WebMessageBodyStyle.Bare,
        UriTemplate = "/Upload")]
    void Upload(Stream data);

}

Создайте класс...

    public class Service1 : IService1 {

    public void Upload(Stream data) {

        // Get header info from WebOperationContext.Current.IncomingRequest.Headers
        // open and decode the multipart data, save to the desired place
    }

И config, чтобы принимать потоковые данные и максимальный размер

<system.serviceModel>
   <bindings>
     <webHttpBinding>
       <binding name="WebConfiguration" 
                maxBufferSize="65536" 
                maxReceivedMessageSize="2000000000"
                transferMode="Streamed">
       </binding>
     </webHttpBinding>
   </bindings>
   <behaviors>
     <endpointBehaviors>
       <behavior name="WebBehavior">
         <webHttp />         
       </behavior>
     </endpointBehaviors>
     <serviceBehaviors>
       <behavior name="Sandbox.WCFUpload.Web.Service1Behavior">
         <serviceMetadata httpGetEnabled="true" httpGetUrl="" />
         <serviceDebug includeExceptionDetailInFaults="false" />
       </behavior>
     </serviceBehaviors>
   </behaviors>
   <services>     
     <service name="Sandbox.WCFUpload.Web.Service1" behaviorConfiguration="Sandbox.WCFUpload.Web.Service1Behavior">
      <endpoint 
        address=""
        binding="webHttpBinding" 
        behaviorConfiguration="WebBehavior"
        bindingConfiguration="WebConfiguration"
        contract="Sandbox.WCFUpload.Web.IService1" />
    </service>
  </services>
 </system.serviceModel>

Также в System.Web увеличьте количество данных, разрешенных в System.Web

<system.web>
        <otherStuff>...</otherStuff>
        <httpRuntime maxRequestLength="2000000"/>
</system.web>

Это всего лишь основы, но позволяет добавить метод Progress, чтобы показать индикатор выполнения ajax, и вы можете добавить некоторую безопасность.

Ответ 2

Я точно не знаю, что вы пытаетесь сделать здесь, но нет никакой встроенной поддержки в "классическом" SOAP-основанном WCF для захвата и обработки данных формы сообщения. Вы должны сделать это сами.

С другой стороны, если вы говорите о WCF на основе REST с помощью webHttpBinding, у вас наверняка есть методы обслуживания, которые украшены атрибутом [WebInvoke()], который вызывается с помощью метода HTTP POST.

    [WebInvoke(Method="POST", UriTemplate="....")]
    public string PostHandler(int value)

Шаблон URI будет определять URI для использования, где должен идти HTTP POST. Вам придется подключить это к вашей форме ASP.NET(или тому, что вы используете, чтобы на самом деле сделать сообщение).

Для отличного введения в стиль REST стиля WCF, проверьте Aaron Skonnard серию трансляции экрана на стартовый комплект WCF REST и как его использовать.

Марк