Потребление WCF Отдых 4 от ASP.СЕТЬ - PullRequest
0 голосов
/ 08 сентября 2010

Я полный новичок ASP .NET. Я написал набор веб-сервисов, используя WCF 4 Rest Starter Kit. Я вызываю все из приложения Flash, но я хочу написать для себя быструю и грязную админ-панель, которую не нужно писать во Flash.

Я полагаю, что быстрее будет запустить его в ASP. Итак, вопрос в том, чтобы рассмотреть функцию WCF следующим образом:

[WebInvoke(UriTemplate = "/Login/", Method = "POST")]
        public User Login(User user)
        {
             // Code here
             // Either throw a WebFaultException or return the logged in user with a session id

Как бы я использовал это со страницы ASP .Net с именем пользователя, паролем, полем отправки, и это либо отображает ошибки 401 и т. Д., Либо успех (returnuser.sessionid).

Спасибо!

Примечание: Я знаю, как вызвать службу отдыха через Http в C #. На самом деле вопрос в том, есть ли «хороший способ» из-за этого в ASP, или просто создайте такую ​​форму, как:

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<form action="WebForm2.aspx.cs" >
    <asp:textbox id="Email" runat="server"/>
    <asp:textbox id="Password" runat="server"/>
    <asp:Button id="Button1" OnClick="OnButtonClick" runat="server" Text="Login"/>
  </form>
  <asp:Label ID="labelResult" runat="server" />
</asp:Content>

Затем, нажав на код, сделайте что-то вроде этого:

 protected  void OnButtonClick(object sender, EventArgs e)
        {
            HttpWebRequest req = WebRequest.Create("http://localhost:35810/Users/Login/") as HttpWebRequest;

            String userString = UsefulStuff.Serialization.SerializationUtil.
                SerializeDataContractToString(typeof(User), new User() { Email =  new Email(textboxUsername.text),
                                                                         Password = new Password(textboxPassword.text) });

            String strResponse = GetHttpPostResponse(req, userString);

            User recievedUser = UsefulStuff.Serialization.SerializationUtil.DeserializeDataContractString(
                typeof(User), strResponse) as User;

            labelResult.Text = recievedUser.SessionId;
        }


        public static String GetHttpPostResponse(HttpWebRequest httpWebRequest, String serializedPayload)
        {
            httpWebRequest.Method = "POST";
            httpWebRequest.ContentType = "text/xml";
            httpWebRequest.ContentLength = serializedPayload.Length;

            StreamWriter streamOut = new StreamWriter(httpWebRequest.GetRequestStream(), Encoding.ASCII);
            streamOut.Write(serializedPayload);
            streamOut.Close();

            StreamReader streamIn = new StreamReader(httpWebRequest.GetResponse().GetResponseStream());

            string strResponse = streamIn.ReadToEnd();
            streamIn.Close();

            return strResponse;
        }

1 Ответ

4 голосов
/ 08 сентября 2010

Основной подход для вызова службы REST - HttpWebRequest

// User object serialized to XML
XElement data = new XElement("User",
  new XElement("UserName", UserName),
  new XElement("Password", Password)
);

MemoryStream dataSream = new MemoryStream();
data.Save(dataStream);

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(YourServiceUrl);
request.Method = "POST";
request.ContentType = "application/xml";
// You need to know length and it has to be set before you access request stream
request.ContentLength = dataStream.Length; 

using (Stream requestStream = request.GetRequestStream())
{
  dataStream.CopyTo(requestStream);   
  requestStream.Close();
} 

HttpWebResponse response = request.GetResponse();
if (response.Status == HttpStatusCode.Unauthorized)
{
  ...
}
else
{
  ...
}
response.Close();
...