Загрузка изображения вместе с идентификатором пользователя для службы wcf с использованием контракта данных

Я хотел бы загрузить изображение из javascript в службу wcf, используя post, datacontract. Я читал в Google, что с помощью datacontract это невозможно, это можно сделать с помощью контракта сообщений, потому что, когда один параметр является потоком, у него не должно быть никаких других параметров.

Однако в некоторых ссылках упоминается, что это можно сделать, передав параметр в строке запроса. (например: Загрузка файла службы WCF Restful с поддержкой нескольких платформ ) Я пробовал это, но все еще получаю сообщение об ошибке, говорящее, что если поток присутствует в качестве параметра, он не должен содержать никаких других параметров. Но это невозможно даже со строкой запроса? Ниже приведен мой код

 [OperationContract]
    [WebInvoke(Method = "POST",UriTemplate = "/UploadFile/userId={userId}", BodyStyle = WebMessageBodyStyle.WrappedRequest)]
    void UploadFile(string userId,Stream uploadingDetails);

person gopi.komanduri    schedule 08.03.2017    source источник


Ответы (1)


Параметр Stream должен быть последним параметром в вашем операционном контракте. Если вы используете v3.5 или 4.0, вы увидите эту ошибку. Но вы можете игнорировать это. Или вы можете попробовать сделать так:

[DataContract]
public class UploadData
{
    [DataMember]
    string userId { get; set; }

    [DataMember]
    Stream uploadingDetails { get; set; }
}

public class YourService : IYourService
{

    public bool  UploadFile(UploadData request)
    {
    }
}

или у вас есть еще один вариант при использовании Stream, просто постарайтесь избегать .svc в URL-адресе. добавьте приведенный ниже код:

public class Global : System.Web.HttpApplication
{
    RouteTable.Routes.Add(new ServiceRoute("yourApp/yourService/upload", new WebServiceHostFactory(), typeof(YourService)));
} 

и украсьте приведенный ниже атрибут для вашего сервиса:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

и позвоните в службу, как показано ниже:

http://localhost:123456/yourApp/yourService/upload/{userId}
person hari teja    schedule 09.03.2017
comment
Привет, ваш первый пример кода мне не помог, так как я все еще получаю ту же ошибку. Не могли бы вы предоставить мне полный пример кода (а также как вызвать форму javascript, пожалуйста), для других примеров. Спасибо . - person gopi.komanduri; 12.03.2017