Webservice / Aufruf von Webmethode mit Parameter

17/10/2008 - 08:38 von mops05 | Report spam
Hallo,

ich möchte per SSIS-Paket auf einen Webservice zugreifen. Hierzu wollte ich
den Task 'Webdienst' verwenden. Zu Testzwecken habe ich mir folgende
Procedure bzw. Endpoint erstellt:

<code>
CREATE PROCEDURE ws_test
@int_val int,
@str_val varchar(255),
@ret_val int OUTPUT
AS

SET NOCOUNT ON

CREATE TABLE #test (
id int IDENTITY(1,1) NOT NULL,
int_val int,
str_val varchar(255),
CONSTRAINT [pk__test] PRIMARY KEY (id)
)

INSERT INTO #test
SELECT
10,
'Text'

INSERT INTO #test
SELECT
@int_val,
@str_val

SET NOCOUNT OFF

SELECT @ret_val = @@IDENTITY


/* -- */


CREATE ENDPOINT My_Endpoint
STATE=STARTED
AS HTTP (
PATH=N'/sql',
PORTS = (CLEAR),
AUTHENTICATION = (NTLM, KERBEROS, INTEGRATED)
)
FOR SOAP (
WEBMETHOD 'ws_test'(
NAME=N'demodb.dbo.ws_test'
)
)
</code>

Jetzt zu meiner Vorgehensweise für den Task 'Webdienst':
1. HTTP-Verbindungsmanager eingerichtet und getestet
2. Pfad zum Speichern des WSDL-Files angegeben (Download getestet)
3. Register 'Eingabe'
- Service MyEnpoint ausgewàhlt
- Methode ws_test ausgewàhlt
- Und hier habe ich bereits mein erstes Problem. Ich habe bisher
lediglich Parameter der Datentypen Int bzw. Float für meine der Webmethode
zugrundeliegenden T-SQL Prozedur verwenden können, damit ich nach Auswahl der
Methode im Register 'Eingabe' auch die Paramter angezeigt bekomme. Lt. Hilfe
sollten Zeichenfolgen doch auch gehen!?

Um mit meinem Test weiterzukommen, habe ich also den Parameter str_val aus
der Prozedur entfernt.

- Jetzt erhalte ich nach Aktualisierung des WSDL-Files auch die Parameter
der zuvor ausgewàhlten Webmethode angezeigt.
4. Task ausführen endet mit dem Fehlermeldung => [Task 'Webdienst'] Fehler:
Fehler mit folgender Fehlermeldung:
'Microsoft.SqlServer.Dts.Tasks.WebServiceTask.WebserviceTaskException: Die
Webmethode konnte nicht ausgeführt werden. Fehler: 'Die Methode
ProxyNamespace.My_Endpoint.ws_test konnte nicht gefunden werden.'. bei
Microsoft.SqlServer.Dts.Tasks.WebServiceTask.WebMethodInvokerProxy.InvokeMethod(DTSWebMethodInfo
methodInfo, String serviceName, Object connection) bei
Microsoft.SqlServer.Dts.Tasks.WebServiceTask.WebServiceTaskUtil.Invoke(DTSWebMethodInfo
methodInfo, String serviceName, Object connection, VariableDispenser
taskVariableDispenser) bei
Microsoft.SqlServer.Dts.Tasks.WebServiceTask.WebServiceTask.executeThread()'.


Wie kann ich den unter 4. erzeugten Fehler beseitigen und wie kann ich mit
Zeichenfolgen als Parameter meiner Webmethode arbeiten?


Vielen Dank im voraus,
Thomas
 

Lesen sie die antworten

#1 Helge C. Rutz
22/10/2008 - 00:56 | Warnen spam
Hi Thomas,

ich kann/will Dir Deine aktuellen Fragen nicht beantworten, da ich den
entsprechenden Task schon lange abgehakt habe.
Nach meinen Erfahrungen ist er nicht zuverlàssig nutzbar und hat einige
Limitierungen - wie einen festen 10min timeout.
Deshalb schreibe ich alle Webservice Abfragen in Skript Komponenten, so
dass ich Sie wenn nötig auch direkt als Datenquelle oder Senke verwenden
kann.
Es ist zwar teilweise etwas Trickreich die Webservice Definition
einzubinden, aber das ist inzwischen recht gut dokumentiert.

Deshalb rate ich Dir persönlich (IMHO) verschwende Deine Zeit nicht mit
Webtask, sondern schreib gleich richtigen Skript Code.
... oder sieht das jemand in der Community anders?

Gruß
Helge

Ähnliche fragen