Разбор потока и параметра в контракте WCF-операции через JSON - PullRequest
3 голосов
/ 03 ноября 2011

Мне нужно вызвать службу WCF для преобразования изображения. Поскольку изображение является потоком (может быть большим), я хочу иметь метод, с помощью которого я могу отправить поток, а также пару параметров (информацию о преобразовании изображения) в метод. Как определить сигнатуру метода для контракта на эксплуатацию? Обратите внимание, что я делаю вызов JSON и использую метод post Http для отправки изображения. Так что я не могу позволить себе роскошь создавать прокси .net.
Как я могу сделать вызов следующему методу WCF? Или есть лучший способ сделать это? Например.

        [OperationContract]
        [WebInvoke(UriTemplate = "/MyOperation", Method = "POST", RequestFormat = WebMessageFormat.Json,BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
Public CompositeType1 MyOperation(Stream image,CompositeType2 param){

}

Ответы [ 3 ]

2 голосов
/ 31 мая 2012

Rajesh ответ неверен У вас могут быть дополнительные параметры с потоком

Попробуйте это:

[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/{pram1}/{pram2}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
string ProcessData(string pram1, string pram2, Stream zipFile);

Посмотрите на эту ссылку WCF UriTemplate и данные POST на msdn

0 голосов
/ 05 мая 2013

Используйте этот код:

ServiceContract]
    public interface IRestServiceImpl
    {
        [OperationContract]
        [System.ServiceModel.Web.WebInvoke(Method = "GET",ResponseFormat=System.ServiceModel.Web.WebMessageFormat.Xml, BodyStyle =System.ServiceModel.Web.WebMessageBodyStyle.Wrapped, UriTemplate = "xml/{id}")]
        string XMLData(string id);
        [OperationContract]
        [System.ServiceModel.Web.WebInvoke(Method = "GET", ResponseFormat = System.ServiceModel.Web.WebMessageFormat.Json, BodyStyle = System.ServiceModel.Web.WebMessageBodyStyle.Wrapped, UriTemplate = "json/{id}")]
        string JSONData(string id);
    }




public class RestServiceImpl : IRestServiceImpl
    {
        #region IRestService Members
        public string XMLData(string id)
        {
            return "You Request Porduct" + ":"+id;

        }
        public string JSONData(string id)
        {
            return "Yor Request Product" +":"+ id;
        }
        #endregion
    }
0 голосов
/ 15 ноября 2011

Во-первых, когда у вас есть Stream в качестве одного из параметров, вы не можете иметь дополнительные параметры, которые изменяют ваш метод следующим образом:

[WebInvoke]
public CompositeType1 MyOperation(Stream image)
{}

Теперь для того, чтобы передать как объект изображения, так и объект составного типаэтот метод достижим, но вы должны опубликовать запрос в виде составной формы данных.Когда вы отправляете ваш запрос как данные многочастной формы, вам потребуется анализатор на стороне сервера, который выполняет синтаксический анализ потока для извлечения соответствующего контента для вас, т.е. извлечения изображения и объекта составного типа из потока.Для загрузки уже существует парсер многокомпонентных форм, но вы должны настроить его в соответствии со своими требованиями.Что я думаю, это сложная задача.Ссылка для разбора составной формы: здесь

Некоторая информация о данных составной формы может быть найдена здесь

Я думаю, самый простой способ был быотделите загрузку изображения от операции и получите ее отдельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...