Avatar billede Slettet bruger
05. oktober 2013 - 07:33 Der er 1 kommentar

WCF Rest Service med POST returnerer ikke noget fra HTML form

Jeg forsøger at lave min første simple REST service der skal modtage data via POST fra en html form. Jeg har fulgt et par forskellige guides men resultatet er det samme hver gang både på localhost og på min webserver (Unoeuro) - jeg burde modtage en tekststreng som svar men får istedet en blank side. ISS giver ingen fejl, jeg builder og debugger uden problemer og VS2010 fortæller mig at servicen er tilføjet

Jeg er efterhånden desperat - jeg er i gang med et projekt der snart skal være færdigt og en service er en lille men temmelig central del i det. Jeg vil være taknemlig for enhver hjælp.

Interface i IMyService.cs
namespace WCF_Rest_Based
{
    [ServiceContract]
    public interface IMyService
    {
        [OperationContract]
        [WebInvoke(Method = "POST",
        UriTemplate = "GetData")]
        string GetData(Stream data);
    }
}

Implementering i MyService.svc
namespace WCF_Rest_Based
{
    public class MyService : IMyService
    {
        public string GetData(Stream input)
        {
            string body = new StreamReader(input).ReadToEnd();
            NameValueCollection nvc = HttpUtility.ParseQueryString(body);
            return nvc["Test"];
        }
    }
}

HTML form
    <form id="contact-form" action="http://www.domæne.dk/MyService.svc/GetData" method="post">
              <input name="Test" type="text" value="pong" />
              <input type="submit" />
    </form>

Web config
  <system.serviceModel>
    <services>
      <service name="WCF_Rest_Based.MyService" behaviorConfiguration="myServiceBehavior" >
        <endpoint name="webHttpBinding"
                  address="" binding="webHttpBinding"
                  contract="WCF_Rest_Based.IMyService"
                  behaviorConfiguration="webHttp"
                  >
        </endpoint>
        <endpoint name="mexHttpBinding"
                  address="mex"
                  binding="mexHttpBinding"
                  contract="IMetadataExchange"
                  />       
      </service>
    </services>

    <behaviors>
      <serviceBehaviors>
        <behavior name="myServiceBehavior" >
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
        <behavior>
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="webHttp">
          <webHttp/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true"
                              minFreeMemoryPercentageToActivateService="0" />
  </system.serviceModel>
Avatar billede montago Praktikant
29. juni 2014 - 17:52 #1
*tager mig til hovedet*

Jeg ser det igen og igen, at folk forsøger at lave en webservice, men ender med at voldtage WCF / ASMX til ukendelighed.

string GetData(Stream data); <-- hvad fanden er det ?

Det er umuligt at teste, og ubrugeligt i praksis.

string GetData(string data);

ville være lige til at teste og komme videre med.

Og grunden til at du ikke får noget resultat, er formodentlig fordi du mangler CrossDomainPolicy:

http://msdn.microsoft.com/en-us/library/cc197955(v=vs.95).aspx

medmindre du kun vil bruge din service fra samme domæne selvfølgelig...

...

Men er det i ramme alvor at du gerne vil modtage en Stream datatype ??
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester