Avatar billede saudoo Nybegynder
12. august 2011 - 18:37 Der er 12 kommentarer og
1 løsning

Webservice på ASP.Net 4 med Integrated Mode

Hej eksperten,

Jeg har siddet og bøvlet lidt med at få mine webservices til at fungere.

Jeg gik endda så langt som til at lave en helt som web-service fil med en standard HelloWorld() funktion. Som i kan se her:
http://beta.børnemodel.dk/test.asmx

Helt almindelig standard-fil uden noget ændret i sig.

Skidtet virker bare ikke - og jeg kan ikke forstå hvorfor. Hvorfor prøver den f.eks. at konvertere til et heltal? :S

Jeg har skrevet til min webhost, hvad jeg kunne gøre og fik svaret, som det eneste, at jeg kørte ASP.Net 4 Integrated Mode.

Er der nogle der har nogen erfaring med Webservices og Integrated mode?
Avatar billede arne_v Ekspert
12. august 2011 - 18:46 #1
Maa vi see koden til servicen?
Avatar billede saudoo Nybegynder
12. august 2011 - 18:50 #2
Selvfølgelig:




Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.ComponentModel

' To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
' <System.Web.Script.Services.ScriptService()> _
<System.Web.Services.WebService(Namespace:="http://beta.børnemodel.dk/")> _
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ToolboxItem(False)> _
Public Class test1
    Inherits System.Web.Services.WebService

    <WebMethod()> _
    Public Function HelloWorld() As String
        Return "Hello World"
    End Function


End Class
Avatar billede arne_v Ekspert
12. august 2011 - 19:06 #3
Tja - det er meget standard.

Er der noget specielt i web.config ?
Avatar billede saudoo Nybegynder
12. august 2011 - 19:11 #4
Nej altså, det synes jeg ikke rigtig. Det er den samme web.config jeg har brugt lokalt, hvor webservicen har fungeret upåklageligt:


<?xml version="1.0"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <configSections>
  </configSections>
  <connectionStrings>
    <remove name="connStringSql"/>
    <add name="connStringSql" connectionString="[indhold]" providerName="System.Data.SqlClient"/>
  </connectionStrings>
  <system.web>
    <pages enableViewStateMac="false" enableEventValidation="false" viewStateEncryptionMode="Never">
      <controls>
        <add tagPrefix="FTB"      namespace="FreeTextBoxControls" assembly="FreeTextBox" />
        <add tagPrefix="upro"    namespace="AjaxControlToolkit"  assembly="AjaxControlToolkit" />
        <add tagPrefix="upro"    tagName="sidemenu" src="~/komponenter/sidemenu/sidemenu.ascx" />
        <add tagPrefix="upro"    tagName="sti" src="~/komponenter/sti/sti.ascx" />
      </controls>
    </pages>
    <customErrors mode="Off"/>
    <globalization uiCulture="en" culture="en-US" />
    <compilation debug="true" strict="false" explicit="true" targetFramework="4.0"/>

    <webServices>
      <protocols>
        <add name="HttpGet"/>
        <add name="HttpPost"/>
      </protocols>
    </webServices>
  </system.web>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
</configuration>
Avatar billede arne_v Ekspert
12. august 2011 - 19:36 #5
Kunne du proeve med:

...
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true"/>
    <handlers>
      <add verb="*" path="*.asmx" name="asmx" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    </handlers>
  </system.webServer>
...

Det er rent gaetteri, men ....
Avatar billede saudoo Nybegynder
12. august 2011 - 19:37 #6
Jeg har forøvrigt et par pageroutes opsat. Men jeg kan ikke se hvordan det skulle kunne være årsag til dette problem. :\ Jeg har jo i hvert fald aldrig gang i, at skulle konvertere noget i min pageroute til heltal. :S
Avatar billede saudoo Nybegynder
12. august 2011 - 19:45 #7
Ah, så kom vi da lidt videre. :)

Jeg får returneret et svar, fra funktionen der returnerer string.

På denne webservice:
http://beta.børnemodel.dk/modeller.asmx

Der har jeg dog lidt problemer endnu. Jeg har prøvet at få hentet lidt indhold ud fra databasen ud i en datatabel, som jeg så konverterer til XML.

Testfunktion i webservicen ser således ud:

Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.ComponentModel
Imports System.Xml

<System.Web.Script.Services.ScriptService()> _
<WebService(Namespace:="http://beta.børnemodel.dk/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Public Class modellerwebservice
    Inherits System.Web.Services.WebService

    <WebMethod()> _
    Public Function testFunktion() As XmlElement
        Dim objData As New DataAccess
        Dim dtTest As DataTable = objData.GetData("SELECT * FROM tblModeller")
        Dim serialize As New SerializeFac

        Return serialize.GetXml(dtTest)
    End Function

End Class


Jeg har selvfølgelig skåret de andre funktioner væk fra overstående kode, så den fylder så lidt som muligt. :)
Avatar billede saudoo Nybegynder
12. august 2011 - 19:49 #8
Og GetXML() er som herunder:

    Public Function GetXml(ByVal objTable As DataTable) As XmlElement

        Dim objDOM As XmlDocument = New XmlDocument
        Dim objRoot As XmlElement = objDOM.CreateElement("results")
        Dim objRow As DataRow
        Dim objElem As XmlElement
        Dim objCol As DataColumn

        ' Opret "row" forhver række
        For Each objRow In objTable.Rows
            objElem = objDOM.CreateElement("row")

            ' Opret hver kolonne, som attribut med værdi, under rækken
            For Each objCol In objTable.Columns
                If Not objRow.IsNull(objCol.ColumnName) Then
                    If objCol.ColumnName = "fldLastname" Then objElem.SetAttribute(objCol.ColumnName, Left(CStr(objRow.Item(objCol.ColumnName)), 1)) Else objElem.SetAttribute(objCol.ColumnName, CStr(objRow.Item(objCol.ColumnName)))
                Else
                    objElem.SetAttribute(objCol.ColumnName, "")
                End If
            Next
            objRoot.AppendChild(objElem)
        Next
        Return objRoot

    End Function
Avatar billede arne_v Ekspert
12. august 2011 - 19:52 #9
Det er lidt suspekt at returnere en .NET specific type som XmlElement i en web services.

Hvad pokker skulle en Java/PHP/Python/Ruby/Perl/C++ client goere med den.

Konverter til String og return den og lad client konvertere den XML til hvad nu giver mening i det sprog client bruger.
Avatar billede saudoo Nybegynder
12. august 2011 - 19:53 #10
Ah for pokker, sorry. Jeg havde lige rodet i mine connectionsstrings i web.config. :) Det virker som en drøm. Du skal have tusind tak.

Må jeg spørge hvad den handler er til for?
Avatar billede arne_v Ekspert
12. august 2011 - 19:58 #11
den fortaeller noget om hvordan .asmx filer skal processes - og det der sker med den er tilsyneladende bedre end det der sker uden

jeg fandt den bare med lidt heldig googling
Avatar billede arne_v Ekspert
12. august 2011 - 19:59 #12
og svar
Avatar billede saudoo Nybegynder
12. august 2011 - 20:00 #13
Hehe, ja det tør siges. Nå men tak igen for hjælpen. Du reddede mig sgu godt nok lige fra en værre kattepine. :)
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

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