サービスを WCF で作成して iCal を返すにはどうすればよいですか? 私が見た例では、応答をフォーマットする方法として xml または json を使用しています。他のタイプのレスポンスボディを返す最良の方法は何ですか?
2 に答える
このようなもの:
[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...
}
これで、たとえば yourService.svc/123.ics に対して HTTP GET を実行して、iCal を取得できます。
これが機能する理由は、「ストリーム」が WCF REST で特殊なケースになっているためです (非 XML、非 JSON 応答に使用されます)。
これを機能させるには、WebHttpBinding と WebHttp の両方の動作を使用する必要があることに注意してください。
最も簡単な解決策は、WCF 呼び出しから単純な文字列として XML または JSON 形式 (任意の選択) で iCal 表現を返すことです。
[ServiceContract]
interface IMyCalService
{
[OperationContract]
string GetiCal(.......);
}
iCal XML (または JSON) を含む文字列を受け取ったら、クライアントでさらに処理します。これは、SOAP を使用して標準の WCF で実行できます。
それを行う他の方法は、特定の URL にヒットしたときに iCal 形式で応答を返す WCF REST サービスを使用することです。これには、当分の間 (.NET 3.0/3.5 で) WCF Rest Starter Kitをインストールする必要があります。私は iCal フォーマットに詳しくありませんが、何らかの方法で iCal の要件を満たすために必要な XML フォーマットを構築できると確信しています。
マルク