Как мне получить мою службу, написанную с WCF, чтобы вернуть iCal? В примерах, которые я вижу, используется как xml или json, так и способ форматирования ответа. Каков наилучший способ вернуть другие типы органов реагирования?Служба WCF для возврата iCal
ответ
Самым простым решением было бы вернуть ческих представления в XML или формате JSON (ваш выбор) в виде простой строки из вашего WCF вызова:
[ServiceContract]
interface IMyCalService
{
[OperationContract]
string GetiCal(.......);
}
, а затем пойти дальше и обрабатывать его дальше на клиенте , как только вы получили строку, содержащую XML-код iCal (или JSON). Это можно сделать с помощью стандартного WCF с использованием SOAP.
Другие способы сделать это могут заключаться в использовании службы REST WCF, которая возвращает ответ в формате iCal при попадании на конкретный URL-адрес - для этого требуется установить WCF Rest Starter Kit (в .NET 3.0/3.5). Я не знаком с форматом iCal, но, я уверен, так или иначе, вы сможете построить необходимый XML-формат для удовлетворения требований iCal.
Марк
Что-то вроде этого:
[WebGet(UriTemplate="{id}.ics")]
[OperationContract]
Stream GetCalendar(int id)
{
WebOperationContext.Current.OutgoingResponse.ContentType="text/calendar";
//Now just return the appropriate data in iCal format in the Stream...
}
Итак, теперь вы можете сделать HTTP GET, чтобы, например, yourService.svc/123.ics и вернуть iCal.
Причина, по которой это происходит, заключается в том, что «Стрим» имеет специальную обрезку в WCF REST (используется для ответов не-XML, не-JSON).
Помните, что для этого вам необходимо использовать поведение WebHttpBinding и WebHttp.
Любой шанс, который вы можете расширить на последнем предложении «Помните, что для этого вам нужно использовать поведение WebHttpBinding и WebHttp».? – Drammy
В конфигурации вашего сервиса вам необходимо использовать как http://msdn.microsoft.com/en-us/library/bb412176.aspx, так и http://msdn.microsoft.com/en-us/library/bb924425.aspx –