0

従来のASPページ/フォームからリクエストを受け取り、AWSS3で事前に署名された有効期限が切れるURLを返すWCFWebサービスを作成する必要があります。(私はWCFの経験が少しあります。以前は、カスタムJSON形式のオブジェクトを返すことができました。)

次に、フォームの投稿を受け取り、フォームから要求されたファイルの名前を取得し、24時間で有効期限が切れる事前署名されたURLを生成して、それを返す必要があります。参考までに、私は理論がうまくできていません。コード例が必要です。

必要なことをするために以下をマッサージするにはどうすればよいですか?

Amazon S3からのビデオの提供 (これは私が必要としているものに近いようです。私は自分でVBからC#に変換できます。全体のフローを理解するには、このスニペット以上のものが必要です。

=== SampleRestService.svc.cs ===

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.Data.SqlClient;
using System.Configuration;

namespace WcfService5
{       
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
    public class SampleRestService : ISampleRestService
    {       
        public IEnumerable<APIContentObject> GetAllUsers()
        {
            IList<APIContentObject> myAPIContentObject = new List<APIContentObject>();

            string strcon = ConfigurationManager.ConnectionStrings["iOSConn"].ConnectionString;

            using (SqlConnection conn = new SqlConnection(strcon))
            {
                conn.Open();
                string cmdStr = String.Format("SELECT  FirstName, LastName, Email, pword, SignUpDate, enabled FROM Users");
                SqlCommand cmd = new SqlCommand(cmdStr, conn);
                SqlDataReader rd = cmd.ExecuteReader();

                if (rd.HasRows)
                {
                    while (rd.Read())
                    {
                        myAPIContentObject.Add(new APIContentObject(rd["FirstName"].ToString(),
                                                                    rd["LastName"].ToString(),
                                                                    rd["Email"].ToString(),
                                                                    rd["pword"].ToString(),
                                                                    rd["SignUpDate"].ToString(),
                                                                    rd["enabled"].ToString(),
                                                                    rd["FirstName"].ToString()));                                                                         
                    }
                }
                conn.Close();
            }
            return myAPIContentObject;
        }    
    }

    [DataContract]
    public class APIContentObject
    {
        [DataMember]
        public string Name { get; set; }
        [DataMember]
        public string Excerpt { get; set; }
        [DataMember]
        public string Content { get; set; }
        [DataMember]
        public string ImageURL { get; set; }
        [DataMember]
        public string ThumbnailURL { get; set; }
        [DataMember]
        public string SluggedURL { get; set; }
        [DataMember]
        public string FileURL { get; set; }

        public APIContentObject(string vName, string vExcerpt, string vContent, string vImageURL, string vThumbnailURL, string vSluggedURL, string vFileURL)  //, decimal sal)
        {
            Name = vName;
            Excerpt = vExcerpt;
            Content = vContent;
            ImageURL = vImageURL;
            ThumbnailURL = vThumbnailURL;
            SluggedURL = vSluggedURL;
            FileURL = vFileURL;
        }

    }   
}

==== iSampleRestService.cs ====

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.ServiceModel.Web;

namespace WcfService5
{   
    [ServiceContract]
    public interface ISampleRestService
    {
        [OperationContract]
        //attribute for returning JSON format
        [WebGet(ResponseFormat = WebMessageFormat.Json,
            RequestFormat = WebMessageFormat.Xml,
            BodyStyle = WebMessageBodyStyle.Bare,
            UriTemplate = "/json/users")]
        //method
        IEnumerable<APIContentObject> GetAllUsers();              
    }
}

==== web.config ====

<?xml version="1.0"?>
<configuration>

  <connectionStrings>
    <add name="iOSConn" connectionString=" Server=HIDDEN;Database=HIDDEN;User ID=HIDDEN;Password=HIDDEN;Trusted_Connection=False;"/>
  </connectionStrings >

  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>

    <services>
      <service name="WcfService5.SampleRestService">
        <endpoint address="/" behaviorConfiguration="REST" binding="webHttpBinding"
          bindingConfiguration="" contract="WcfService5.ISampleRestService" />
        <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration=""
          contract="IMetadataExchange" />
      </service>
    </services>

    <behaviors>
      <endpointBehaviors>
        <behavior name="REST">
          <webHttp helpEnabled="true" defaultOutgoingResponseFormat="Json" />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>

    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

</configuration>
4

1 に答える 1

0

さて、他のいくつかの例を使用して、私は必要なものを理解しました。AmazonS3で事前署名されたURLを作成する方法は次のとおりです。

 public string AWSS2CreatePreSignedURL(string fileName)
        {
            string urlToReturn = "";
            string jsonClient = "";

            string AWSKey = "YOURKEY";
            string AWSSecretKey = "YOURSECRETKEY";

            using (AmazonS3 client = Amazon.AWSClientFactory.CreateAmazonS3Client(AWSKey, AWSSecretKey))
            {
                dynamic req = new Amazon.S3.Model.GetPreSignedUrlRequest
                {
                    BucketName = "gametrainingresources",
                    Key = fileName,
                    Protocol = Amazon.S3.Model.Protocol.HTTPS,
                    Verb = Amazon.S3.Model.HttpVerb.GET,
                    Expires = DateTime.Now.AddMinutes(20)
                    //Expires = DateTime.Now.AddDays(1).AddSeconds(0)
                };

                //url
                urlToReturn = client.GetPreSignedURL(req);

            }

            return urlToReturn;
        }
于 2013-02-13T14:48:27.253 に答える