基本的にプロキシとして機能する (http を https に変換する) WCF サービス (ASP.net でホストされている) があります。信頼できるサイトに接続し、画像を取得して、サービスを通じて返す必要があります。
ストリームを消費者に出荷する前に、サービスでイメージ全体をダウンロードする必要はありませんが、それを行う方法が正確にはわかりません。
信頼できるサイトからの応答ストリームの取得を開始し、すぐにそのストリームを返す必要があると確信しています (ストリームが終了したら、WCF がストリームを破棄することを期待しています)。
これまでのところ、私は持っています
[WebGet(UriTemplate = "/GetImage?imageUrl={imageUrl}")]
public Stream GetImage(string imageUrl)
{
if (string.IsNullOrWhiteSpace(imageUrl))
{ return new MemoryStream(Encoding.UTF8.GetBytes(ErrorBuilder.BuildJsonError("param"))); }
Uri verification = new Uri(imageUrl);
if (verification.Host != "flixster.com")
{
//TODO: Create new error for unknown urls.
WebOperationContext.Current.OutgoingResponse.ContentType = "application/json; charset=utf-8";
return new MemoryStream(Encoding.UTF8.GetBytes(ErrorBuilder.BuildJsonError("param")));
}
WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpeg";
try
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(imageUrl);
//GetResponse() will get the whole thing, which I don't want.
//I just want to start getting bytes back and then ship the stream off to
//the consumer. Basically a proxy.
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
}
}
catch (Exception e)
{
ExceptionLogger.LogException(e);
WebOperationContext.Current.OutgoingResponse.ContentType = "application/json; charset=utf-8";
return new MemoryStream(Encoding.UTF8.GetBytes(ErrorBuilder.BuildJsonError("param")));
}
throw new NotImplementedException();
}
私が正しい方向に向かっているかどうかわからないので、どんな助けでも大歓迎です。皆さんありがとう!