Служба WCF возвращает Response.Write

У меня есть служба WCF, которая будет вызываться из HTML-формы, расположенной в сети клиента.

Когда та же форма отправляет одни и те же данные на страницу ASP, она ожидает примерно такой ответ:

Ответ. Напишите "УСПЕХ" и vbnewline

Как я могу отправить тот же ответ из моей службы WCF?

Спасибо.


person anon2009    schedule 15.01.2010    source источник


Ответы (1)


На самом деле служба WCF может возвращать данные любого типа. Это охватывает основные примитивные типы, такие как int или string, но вы также можете создавать более сложные составные типы (классы) и отправлять их обратно.

ОДНАКО: WCF не предназначен для возврата разметки HTML - это было бы совершенно неправильным подходом к вещам. WCF - это служба. Служба предоставляет некоторые функции, вы отправляете некоторые данные/параметры, вы возвращаете некоторые типы данных/выходных данных.

WCF не должен и никогда не должен заниматься фактическим представлением этих данных на стороне пользователя — это работа вашего пользовательского интерфейса — страницы ASP или чего-то еще, с чем вы имеете дело.

Таким образом, у вас может быть такой сервис WCF:

[ServiceContract]
interface IMyService
{
  [OperationContract]
  string SomeServiceMethod(string someInput);
}

а затем вызовите это из своего клиентского кода примерно так:

string result = MyService.SomeServiceMethod("Hello!");

но вы никогда не должны писать службу WCF, которая возвращает HTML-разметку или любую другую системную информацию.

А поскольку WCF — это система, основанная на сообщениях, служба WCF абсолютно не связана с вашей ASP-страницей — она не может участвовать в жизненном цикле ASP или получать доступ к объекту «Ответ» или чему-то подобному.

person marc_s    schedule 15.01.2010
comment
Марк, Вы абсолютно правы. Возможно, неразумно использовать WCF для чего-то подобного. Я не контролирую форму ASP, которая отправляется в мою службу, которая находится на серверах клиента, и я не могу ее изменить. Клиент ищет слово УСПЕХ, в противном случае он думает, что вызов моей службы не удался. Я могу использовать страницу ASP, чтобы принять вызов, но я хотел использовать WCF для производительности. - person anon2009; 18.01.2010
comment
@ anon2009: вы определенно можете вернуть строку из службы WCF и сделать ее УСПЕШНОЙ, чтобы сигнализировать об успешном завершении. - person marc_s; 18.01.2010
comment
Это не сработало. Возможно, это связано с тем, что я использую REST. [OperationContract] [WebInvoke( Method = POST, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = /Upload)] string GetLogFile(Stream LOGFILE); - person anon2009; 18.01.2010
comment
На самом деле это работает: ebOperationContext.Current.OutgoingResponse.ContentType = text/xml; WebOperationContext.Current.OutgoingResponse.StatusDescription = УСПЕШНО; вернуть УСПЕХ; - person anon2009; 18.01.2010