Avatar billede justincase1089 Nybegynder
27. maj 2013 - 12:34 Der er 10 kommentarer

Kalde ASP.NET WebMethod med argumenter fra C# applikation

Hej

Jeg har en WebMethod I en aspx side

[WebMethod(EnableSession = true)]
public static string GetColumns(string dataSource)
{
    return dataSource; // Min metode goer selvfoelgelig mere end det her :-)
}

Jeg kalder den successfuldt fra JQuery med

var url = getRoot() + "Services/Table.aspx/GetColumns";
$.ajax({
    type: "POST", url: url, async: false,
    data: "{ 'dataSource': '" + encodeURIComponent(getProperty(dboid, "DataSource")) + "'}",
    contentType: "application/json; charset=utf-8", dataType: "json",
    success: function (result) {
        dostuff
    },
    error: function (result) {
        argh
    }
});

Men jeg har ogsaa brug for at foretage samme kald fra en anden C# application. Jeg har forsoegt med

string url = Controller.TheConnection.Url + "/Services/Table.aspx/GetColumns";
string dataSource = "dataSource=" + WebUtility.HtmlEncode(AttributeData.Properties["DataSource"]);

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";

using (Stream requestStream = request.GetRequestStream())
{
    using (var streamWriter = new StreamWriter(requestStream))
    {
        streamWriter.Write(Encoding.UTF8.GetBytes(dataSource));
    }
}

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string a = new StreamReader(response.GetResponseStream()).ReadToEnd();

Men jeg faar bare en tom streng tilbage. Jeg er sikker paa url er den samme I baade JQuery og C# .. hvad goer jeg galt?

tak
Avatar billede Syska Mester
27. maj 2013 - 12:49 #1
Har du prøvet at sætte et break poing i din webapp? Og se om du reelt rammer den url? Og det rent faktisk kommer noget tilbage?
Avatar billede justincase1089 Nybegynder
27. maj 2013 - 23:54 #2
Et breakpoint bliver ikke ramt
Den brokker sig heller ikke naar den returnerer den tomme string
Avatar billede Syska Mester
28. maj 2013 - 00:03 #3
Hvordan kan et break point blive svært?
Avatar billede justincase1089 Nybegynder
28. maj 2013 - 00:06 #4
Jeg forstar ikke svaret

Et breakpoint I WebMetoden bliver ikke ramt
Avatar billede Syska Mester
28. maj 2013 - 08:33 #5
Hvis dit break point i din WebMetode ikke bliver ramt ... så er det jo enten fordi du ikke har attached til den korrekt web process eller fordi din metode rent faktisk ikke bliver ramt.
Avatar billede justincase1089 Nybegynder
28. maj 2013 - 10:33 #6
Ja, eller at jeg enten kalder den forkert eller at metoden ikke er dekoreret korrekt for at blive kaldt fra C#

Faktum er at min url I C# og I JQuery er praecis den samme dvs
Controller.TheConnection.Url + "/" == getRoot()

Men hvor JQuery er I stand til at returnere noget, saa faar jeg ikke noget I C#.

Saa et eller andet sted I min metode/kaldet dertil gaar der noget galt, jeg ved bare ikke hvor
Avatar billede Syska Mester
28. maj 2013 - 11:25 #7
Hvis du kan lave et simpelt eksempel hvor det ikke virker, så skal jeg nok kigge på det ...

Smid det på DropBox, SkyDrive, GoogleDrive, osv.

mvh
Avatar billede justincase1089 Nybegynder
28. maj 2013 - 11:43 #8
Hej

Jeg har faktisk lige fundet ud af det ... eller I hvert fald en workaround

Hvis jeg I mit C# kald sender JSON med I stedet for, saa virker det:

string dataSource = "dataSource=" + WebUtility.HtmlEncode(AttributeData.Properties["DataSource"]);
->
string dataSource = "{'dataSource': '" + + WebUtility.HtmlEncode(AttributeData.Properties["DataSource"]) + '}";

og

request.ContentType = "application/x-www-form-urlencoded";
->
request.ContentType = "application/json; charset=utf-8";

og


streamWriter.Write(Encoding.UTF8.GetBytes(dataSource));
->
streamWriter.Write(dataSource);

Men hvorfor jeg ikke kan faa den foerste approach til at virke ved jeg ikke :-)

Anyway ... jeg vil genre give dig de 30 point for forsoeget. Smid et svar
Avatar billede Syska Mester
28. maj 2013 - 11:53 #9
Min antagelse må være at den forventer enten:
application/xml
application/json

og er din content type ikke en af overstående ... måske incl flere, så rammer den ikke din webmethod.

Du kan måske prøve at se hvad din ContentType før stod til.

mvh
Avatar billede justincase1089 Nybegynder
28. maj 2013 - 12:02 #10
Det staar to gange I traaden

request.ContentType = "application/x-www-form-urlencoded";

Og grunden til at den er sat til det er at det har jeg set I flere eksempler. Men det virker altsaa ikke som forventet.

Saa spoergsmaalet er jo om der I attributten [WebMethod] saa ligger en antagelse om ContentType
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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