SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Ajax WebPart consuming WebService

Unbeantwortet Dieser Beitrag hat 10 Antworten

Ohne Rang
66 Beiträge
Goldfinger erstellt 3 März 2010 10:06
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Freunde,

beim Schreiben eines WebParts, welches später mittels Ajax einen WebService aufrufen soll, bin ich folgendermaßen vorgegangen:

WebService.asmx erstellt mit einer WebMethod. (Getrenntes Projekt, getrennter Namespace). Der WebService läuft bereits und funktioniert.

Ich habe einen anderen/erweiterten? ScriptManager eingebunden, der ein Control.js und den WebService bekommt. (Steht so in meinem Buch).

So jetzt kommt das Problem:

Mein Control sollte jetzt folgendermaßen den WebService aufrufen können (habe ich so in Tutorials gesehen):

Aufruf: HyperVWebService.HyperVService.getVMInfo(params, resultDelegate)

Das funktioniert aber nicht.

Beim Debuggen des JavaScript-Controls stelle ich fest, dass "HyperVWebService" nicht definiert/null ist.

Also habe ich Type.registerNamespace('HyperVWebService') eingebaut.

Beim Debuggen stelle ich nun fest, dass HyperVService nicht definiert/null ist.

Also habe ich Type.registerClass('HyperVService') eingebaut.

Doch dies funktioniert nicht (Wahrscheinlich weil 'HyperVService' keine JavaScript Klasse ist...?)

 

Was ist hier das Problem bzw. wie muss ich irgendwas konfigurieren, damit ich eine gültige WebService Referenz im JavaScript bekomme / ist es überhaupt richtig den WebService im JavaScript aufrufen zu wollen - oder wird SP mittels Ajax aufgerufen, sodass DORT dann der WebService aufgerufen werden muss?

Wie kann ich mir das vorstellen, was muss ich anpassen?

Grüße

Alle Antworten

Ohne Rang
66 Beiträge
Goldfinger Als Antwort am 3 März 2010 10:35
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Sind meine Fragen wirklich SOOO abgedroschen kompliziert, dass keiner antworten KANN?

Oder hat's was mit mir persönlich... =D   zu tun....sodass keiner antworten WILL ...

Ohne Rang
929 Beiträge
Thomas Östreich Als Antwort am 3 März 2010 11:00
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Also mit normalen WebService kann ich dir da nicht umbedingt weiterhelfen da ich für Ajax die WCF nutze welche aber nicht OOB von SharePoint unterstützt wird (WSS3/MOSS 2007).

Du greifts auf eine Static Instanz zu welche aber nicht existiert. In dem Buch was du liest "Inside Windows SharePoint Services 3.0" ist doch ein Beispiel für eine erweiterte Wiki wo mit Ajax und WebService auf SharePoint zugegriffen wird. Schau dir auch mal die Tutorials auf asp.net zu Ajax an bzw die Client Docs.

Ajax Controls sind leider bei der Fehlersuche etwas aufwendiger manchmal ist es auch nur ein Schreibfehler. Es ist daher schwer dir da eine Antwort zu geben die dir da weiter hilft.

Ohne Rang
66 Beiträge
Goldfinger Als Antwort am 3 März 2010 11:22
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ähh...naja aufwendig...weiß ich nicht...ist doch nur JavaScript.

Also ich hab das so verstanden - der ScriptManager erzeugt eine JavaScript Klasse aus der "ServiceReference" die ich ihm gebe.

Anschließend sollte dann IRGENDWO in einem JavaScript die möglichkeit bestehen, diese ServiceReference zu nutzen. (Die "Ajax Controls" verstehe ich als HTML- und JavaScript-erzeugende Javascripts) - diese nutzen intern sicherlich auch nichts anderes, als das was der ScriptManager zur Verfügung stellt...also so habe ich das verstanden...richtig? falsch?

 

Letztendlich muss man es doch auf folgendes Problem reduzieren:

Wieso versagt mein ScriptManager beim Einbinden des WebService?

Ohne Rang
929 Beiträge
Thomas Östreich Als Antwort am 3 März 2010 12:01
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ruf doch mal mit deiner WebService Url im IE " ...._vti_bin/deinordner/DeinService.asmx/jsdebug" auf. Falls du dann einen Fehler bekommst kann dein Ajax control nicht auf deinen WebService zugreifen.

Gegebenenfalls musst du eine Web.config mit .Net 3.5 Einstellungen im Ordner deines WebServices bereitstellen.  

Ohne Rang
66 Beiträge
Goldfinger Als Antwort am 3 März 2010 12:31
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich bekomme einen Fehler folgender Art beim Aufruf von http://dev_wss2007/HyperVService.asmx/jsdebug (ich habe es nicht im _vti_bin Ordner - schlimm?)

Die Datei, die Sie zu speichern oder wiederherstellen versuchen, wurde von den Webserveradministratoren auf dieser Website gesperrt.

 

ABER:

In dem WebPart kann ich mit Hilfe von normaler API (z.B. @ createChildControls) auf den WebService zugreifen und bekomme auch schöne Resulst zurück (d.h. der Service an sich funktioniert doch - nur eben nicht öffentlich...)

 

Ohne Rang
929 Beiträge
Thomas Östreich Als Antwort am 3 März 2010 12:45
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Services sollten unterhalb von ISAPI (eigener Ordner unterhalb von ISAPI für eigene web.config! ) ( = _vti_bin/... im IIS) oder Layouts (_layouts). Es bringt dir nix die web.config datei in ISAPI anzupassen wenn dein Service da gar nicht ist

Ordner -> Web.Config = Gilt für alle Objekte im Ordner und Unterordner!

Du kannst von CreateChildControl darauf zugreifen weil der Server wahrscheinlich keine Impersonation durchführt und somit als AppPool Account ausgeführt wird = System.

Als Benutzer sind diese Endungen gesperrt da Services nicht als Content in SharePoint bereitsgestellt werden darf.

Ohne Rang
66 Beiträge
Goldfinger Als Antwort am 3 März 2010 13:02
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Also ich hab im ISAPI Verzeichnis einen Ordern "BIT" angelegt. In diesem Ordner BIT befindet sich eine web.config sowie die asmx.

Im ISAPI Verzeichnis existiert kein "_vit_bin"

Es gibt dort nur "_VTI_ADM" und "_VTI_AUT" - jetzt noch meinen "BIT" und einen "HELP" Ordner. Ansonsten gibts dort nur wsdl's & discos.

 

Und im Services Ordner (bei 80er Virtual Dir) habe ich nochmal die asmx und eine web.config. Darin habe ich einen "bin" Ordner mit der Service DLL.

 

Das heißt, ich habe gerade an 2 Orten deployed - was wohl keinen Sinn macht - wie deploye ich richtig im ISAPI Verzeichnis?

Soll ich einen _vti_bin selber anlegen? Muss ich auch disco und wsdl hineinpacken? Soll die Service DLL vielleicht auch besser aus im GAC registriert werden und in der asmx nach dorthin referenziert werden?

Ohne Rang
929 Beiträge
Thomas Östreich Als Antwort am 3 März 2010 13:46
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

ISAPI ist der Richtige ordner also ISAPI\BIT\...asmx + ....+  web.config

Dann öffne den IIS Manager -> dann dein Web Site und siehe da, da gibt es einen Virtuellen Pfad mit den Namen _vti_bin welcher auf 12\ISAPI zeigt.

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 3 März 2010 13:48
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Schau Dir das Ganze mal in der IIS-Managementkonsole an. Z.B. ist der ISAPI-Ordner in den SharePoint-Sites als virtuelles Verzeichnis _vti_bin eingebunden.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
66 Beiträge
Goldfinger Als Antwort am 3 März 2010 12:33
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Thomas Östreich"]

Gegebenenfalls musst du eine Web.config mit .Net 3.5 Einstellungen im Ordner deines WebServices bereitstellen.  

[/quote]

 

Das habe ich....im ISAPI Verzeichnis und im Services Verzeichnis meines 80er Virtual Directories...