Кто-нибудь знает или еще лучше имеет пример службы WCF, которая примет форму post encoded multipart/form-data
ie. загрузка файла с веб-страницы?
В google появилось пустое.
Ta, Ant
Кто-нибудь знает или еще лучше имеет пример службы WCF, которая примет форму post encoded multipart/form-data
ie. загрузка файла с веб-страницы?
В google появилось пустое.
Ta, Ant
Итак, здесь идет...
Создайте свой контракт на обслуживание, который выполняет операцию, которая принимает поток для своего единственного параметра, украшает 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, и вы можете добавить некоторую безопасность.
Я точно не знаю, что вы пытаетесь сделать здесь, но нет никакой встроенной поддержки в "классическом" 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 и как его использовать.
Марк