1

基本的にプロキシとして機能する (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();
    }

私が正しい方向に向かっているかどうかわからないので、どんな助けでも大歓迎です。皆さんありがとう!

4

1 に答える 1

0

この記事は少し古いため、より新しい手法が利用できる可能性がありますが、達成しようとしているものと非常によく似たものを達成しているようです。

ストリーミング プロキシ

于 2013-01-15T10:11:00.193 に答える