Problem z webservice i aplikacją asp c#

0

Witam mam problem z przekazaniem do funkcji dostępnej w webservice parametrów
Funkcja w webservice wygląda następująco:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Data;
using System.Data.SqlClient;
using System.Data.Odbc;
using System.Collections;
using System.Collections.Generic;
using System.Web.UI.WebControls;

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
// [System.Web.Script.Services.ScriptService]
public class Service : System.Web.Services.WebService
{
    SqlConnection sqlConn = new SqlConnection("Data Source=KARCZ-TOSHIBA\\SQLEXPRESS;Initial Catalog=turystyka;Integrated Security=True");
    public Service () 
    {
    }
[WebMethod]
    public String wykonaj_prcedure(string storedProcName, System.Web.UI.WebControls.ParameterCollection parametry)
    {
        SqlCommand cmd = new SqlCommand(storedProcName, sqlConn);

        cmd.CommandType = CommandType.StoredProcedure;

        for (int i = 0; i < parametry.Count; i++)
        {
            cmd.Parameters.Add(new SqlParameter(parametry[i].Name, parametry[i].DefaultValue));
        }
        String blad = "";
        try
        {
            sqlConn.Open();

            SqlDataReader dr = cmd.ExecuteReader();
            dr.Close();

            sqlConn.Close();

        }

        catch (SqlException ex)
        {
            blad = ex.ToString();
        }
        return blad;
    }

    }

A tutaj klasa w asp która chce skorzystać z funkcji z webservica

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Collections;


public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
    {
String nazwa_procedury = "dodaj_atr_do_zamowienia";

localhost.Service ws = new localhost.Service();

        System.Web.UI.WebControls.ParameterCollection parametry2 = new System.Web.UI.WebControls.ParameterCollection();
        parametry2.Add("@id_zamowienia", System.Data.DbType.Int32, id_zamowienia.ToString());
        parametry2.Add("@id_osoby", System.Data.DbType.Int32, id_osoby);
        parametry2.Add("@id_wycieczki", System.Data.DbType.Int32, id_wycieczki);
        if (CheckBox1.Checked)
        {
            parametry2.Add("@nazwa", System.Data.DbType.String, CheckBox1.Text);
            String s = ws.wykonaj_prcedure(nazwa_procedury, parametry2);
            parametry2.RemoveAt(3);
        }
    }

}

Wygląda to mniej więcej tak. Web service się kompiluje, przy próbie kompilacji aplikacji asp dostaje wiadomość o dwóch błędach:
1.Error 4 The best overloaded method match for 'localhost.Service.zloz_zamowienie(string, localhost.Parameter[])' has some invalid arguments C:\Documents and Settings\Malak\Moje dokumenty\Visual Studio 2008\WebSites\WebSite4\Szczegoly_wycieczki.aspx.cs 87 29 C:...\WebSite4
2.Error 5 Argument '2': cannot convert from 'System.Web.UI.WebControls.ParameterCollection' to 'localhost.Parameter[]' C:\Documents and Settings\Malak\Moje dokumenty\Visual Studio 2008\WebSites\WebSite4\Szczegoly_wycieczki.aspx.cs 87 74 C:...\WebSite4\

Dodam jeszcze że funkcja która znajduje się teraz w webservice działała bez zarzutów gdy była w innej klasie ale w projekcie asp. Bardzo proszę o pomoc bo już nie mam pomysłu jak to można byłoby naprawić.

Z góry bardzo dziękuję

0

dziwnym trafem kompilator mowi o metodzie zloz_zamowienie a Ty nam podales kod wykonaj_prcedure i pare innych, tez innych..

0

Faktycznie wkradł się maly błąd ponieważ mam kilka funkcji w tym webservisie, które przyjmują takie same parametry. Poprawny listing błedu:

1.Error 1 The best overloaded method match for 'localhost.Service.wykonaj_prcedure(string, localhost.Parameter[])' has some invalid arguments C:\Documents and Settings\Malak\Moje dokumenty\Visual Studio 2008\WebSites\WebSite4\Szczegoly_wycieczki.aspx.cs 97 24 C:...\WebSite4\

2.Error 2 Argument '2': cannot convert from 'System.Web.UI.WebControls.ParameterCollection' to 'localhost.Parameter[]' C:\Documents and Settings\Malak\Moje dokumenty\Visual Studio 2008\WebSites\WebSite4\Szczegoly_wycieczki.aspx.cs 97 61 C:...\WebSite4\

0

oo matko, nie stosuj takiego parametru jak "System.Web.UI.WebControls.ParameterCollection" jako argumentu w WS. Ja wiem, że Dictionary<TKey, TValue) się nie da serializować do SOAP, ale istnieją inne rozwiązania. Zmień cały typ parametru.

A poza tym, w twoim kodzie nie ma żadnego odczytu jakichkolwiek danych z bazy - po co więc wywoływać ExecuteReader()? </url>

0
Deti napisał(a)

oo matko, nie stosuj takiego parametru jak "System.Web.UI.WebControls.ParameterCollection" jako argumentu w WS. Ja wiem, że Dictionary<TKey, TValue) się nie da serializować do SOAP, ale istnieją inne rozwiązania. Zmień cały typ parametru.

A poza tym, w twoim kodzie nie ma żadnego odczytu jakichkolwiek danych z bazy - po co więc wywoływać ExecuteReader()? </url>

Ok zmienie, ale jeszcze jakbyś napisał na jaki typ parametru który można było by użyć jako parametry do procedury sqla to było by fajnie

0

Witam

Z powyższym problemem poradziłem sobie, teraz mam taki:

mam funkcję:

[WebMethod]
    public SqlDataSource ustaw_sqlDS(SqlDataSource sds, String zap_sel, String zap_update, ParameterCollection parametry)
    {
        sds.ConnectionString = "Data Source=KARCZ-TOSHIBA\\SQLEXPRESS;Initial Catalog=turystyka;Integrated Security=True";
        sds.SelectCommand = zap_sel;
        sds.UpdateCommand = zap_update;
        foreach (Parameter p in parametry)
        {
            sds.UpdateParameters.Add(p);
        }
        return sds;
    }

Po uruchomieniu web servica wyskakuje taki błąd:

Błąd serwera w aplikacji '/WebService'.
Element XML 'EnableTheming' z obszaru nazw 'http://tempuri.org/' występuje już w bieżącym zakresie. Użyj atrybutów XML do określenia innej nazwy XML lub innego obszaru nazw dla elementu.
Opis: Podczas wykonywania bieżącego żądania sieci Web wystąpił nieobsługiwany wyjątek. Aby uzyskać dodatkowe informacje o błędzie i miejscu jego występowania w kodzie, przejrzyj ślad stosu.

Szczegły wyjątku: System.InvalidOperationException: Element XML 'EnableTheming' z obszaru nazw 'http://tempuri.org/' występuje już w bieżącym zakresie. Użyj atrybutów XML do określenia innej nazwy XML lub innego obszaru nazw dla elementu.

Błąd źrdła:

Podczas wykonywania bieżącego żądania sieci Web został wygenerowany nieobsługiwany wyjątek. Informacje dotyczące pochodzenia i lokalizacji wyjątku można zidentyfikować przy użyciu poniższego śladu stosu wyjątku.

Ślad stosu:

[InvalidOperationException: Element XML 'EnableTheming' z obszaru nazw 'http://tempuri.org/' występuje już w bieżącym zakresie. Użyj atrybutów XML do określenia innej nazwy XML lub innego obszaru nazw dla elementu.]
System.Xml.Serialization.XmlReflectionImporter.AddUniqueAccessor(INameScope scope, Accessor accessor) +866583
System.Xml.Serialization.XmlReflectionImporter.AddUniqueAccessor(MemberMapping member, INameScope elements, INameScope attributes, Boolean isSequence) +84
System.Xml.Serialization.XmlReflectionImporter.InitializeStructMembers(StructMapping mapping, StructModel model, Boolean openModel, String typeName, RecursionLimiter limiter) +1553

[InvalidOperationException: Wystąpił błąd w czasie wykonywania odbicia właściwości 'EnableTheming'.]
System.Xml.Serialization.XmlReflectionImporter.InitializeStructMembers(StructMapping mapping, StructModel model, Boolean openModel, String typeName, RecursionLimiter limiter) +2167
System.Xml.Serialization.XmlReflectionImporter.ImportStructLikeMapping(StructModel model, String ns, Boolean openModel, XmlAttributes a, RecursionLimiter limiter) +460
System.Xml.Serialization.XmlReflectionImporter.InitializeStructMembers(StructMapping mapping, StructModel model, Boolean openModel, String typeName, RecursionLimiter limiter) +223
System.Xml.Serialization.XmlReflectionImporter.ImportStructLikeMapping(StructModel model, String ns, Boolean openModel, XmlAttributes a, RecursionLimiter limiter) +460
System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(TypeModel model, String ns, ImportContext context, String dataType, XmlAttributes a, Boolean repeats, Boolean openModel, RecursionLimiter limiter) +1415

[InvalidOperationException: Wystąpił błąd w czasie wykonywania odbicia typu 'System.Web.UI.Page'.]
System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(TypeModel model, String ns, ImportContext context, String dataType, XmlAttributes a, Boolean repeats, Boolean openModel, RecursionLimiter limiter) +1621
System.Xml.Serialization.XmlReflectionImporter.ImportAccessorMapping(MemberMapping accessor, FieldModel model, XmlAttributes a, String ns, Type choiceIdentifierType, Boolean rpc, Boolean openModel, RecursionLimiter limiter) +10296
System.Xml.Serialization.XmlReflectionImporter.ImportFieldMapping(StructModel parent, FieldModel model, XmlAttributes a, String ns, RecursionLimiter limiter) +139
System.Xml.Serialization.XmlReflectionImporter.InitializeStructMembers(StructMapping mapping, StructModel model, Boolean openModel, String typeName, RecursionLimiter limiter) +1273

[InvalidOperationException: Wystąpił błąd w czasie wykonywania odbicia właściwości 'Page'.]
System.Xml.Serialization.XmlReflectionImporter.InitializeStructMembers(StructMapping mapping, StructModel model, Boolean openModel, String typeName, RecursionLimiter limiter) +2167
System.Xml.Serialization.XmlReflectionImporter.ImportStructLikeMapping(StructModel model, String ns, Boolean openModel, XmlAttributes a, RecursionLimiter limiter) +460
System.Xml.Serialization.XmlReflectionImporter.InitializeStructMembers(StructMapping mapping, StructModel model, Boolean openModel, String typeName, RecursionLimiter limiter) +223
System.Xml.Serialization.XmlReflectionImporter.ImportStructLikeMapping(StructModel model, String ns, Boolean openModel, XmlAttributes a, RecursionLimiter limiter) +460
System.Xml.Serialization.XmlReflectionImporter.InitializeStructMembers(StructMapping mapping, StructModel model, Boolean openModel, String typeName, RecursionLimiter limiter) +223
System.Xml.Serialization.XmlReflectionImporter.ImportStructLikeMapping(StructModel model, String ns, Boolean openModel, XmlAttributes a, RecursionLimiter limiter) +460
System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(TypeModel model, String ns, ImportContext context, String dataType, XmlAttributes a, Boolean repeats, Boolean openModel, RecursionLimiter limiter) +1415

[InvalidOperationException: Wystąpił błąd w czasie wykonywania odbicia typu 'System.Web.UI.WebControls.SqlDataSource'.]
System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(TypeModel model, String ns, ImportContext context, String dataType, XmlAttributes a, Boolean repeats, Boolean openModel, RecursionLimiter limiter) +1621
System.Xml.Serialization.XmlReflectionImporter.ImportAccessorMapping(MemberMapping accessor, FieldModel model, XmlAttributes a, String ns, Type choiceIdentifierType, Boolean rpc, Boolean openModel, RecursionLimiter limiter) +10296
System.Xml.Serialization.XmlReflectionImporter.ImportMemberMapping(XmlReflectionMember xmlReflectionMember, String ns, XmlReflectionMember[] xmlReflectionMembers, Boolean rpc, Boolean openModel, RecursionLimiter limiter) +722
System.Xml.Serialization.XmlReflectionImporter.ImportMembersMapping(XmlReflectionMember[] xmlReflectionMembers, String ns, Boolean hasWrapperElement, Boolean rpc, Boolean openModel, RecursionLimiter limiter) +236

[InvalidOperationException: Wystąpił błąd odzwierciedlający 'sds'.]
System.Xml.Serialization.XmlReflectionImporter.ImportMembersMapping(XmlReflectionMember[] xmlReflectionMembers, String ns, Boolean hasWrapperElement, Boolean rpc, Boolean openModel, RecursionLimiter limiter) +843
System.Xml.Serialization.XmlReflectionImporter.ImportMembersMapping(String elementName, String ns, XmlReflectionMember[] members, Boolean hasWrapperElement, Boolean rpc, Boolean openModel, XmlMappingAccess access) +130
System.Web.Services.Protocols.SoapReflector.ImportMembersMapping(XmlReflectionImporter xmlImporter, SoapReflectionImporter soapImporter, Boolean serviceDefaultIsEncoded, Boolean rpc, SoapBindingUse use, SoapParameterStyle paramStyle, String elementName, String elementNamespace, Boolean nsIsDefault, XmlReflectionMember[] members, Boolean validate, Boolean openModel, String key, Boolean writeAccess) +223
System.Web.Services.Protocols.SoapReflector.ReflectMethod(LogicalMethodInfo methodInfo, Boolean client, XmlReflectionImporter xmlImporter, SoapReflectionImporter soapImporter, String defaultNs) +1971

[InvalidOperationException: Nie można odzwierciedlić metody Service.ustaw_sqlDS.]
System.Web.Services.Protocols.SoapReflector.ReflectMethod(LogicalMethodInfo methodInfo, Boolean client, XmlReflectionImporter xmlImporter, SoapReflectionImporter soapImporter, String defaultNs) +6527
System.Web.Services.Description.SoapProtocolReflector.ReflectMethod() +91
System.Web.Services.Description.ProtocolReflector.ReflectBinding(ReflectedBinding reflectedBinding) +1798
System.Web.Services.Description.ProtocolReflector.Reflect() +703
System.Web.Services.Description.ServiceDescriptionReflector.ReflectInternal(ProtocolReflector[] reflectors) +394
System.Web.Services.Description.ServiceDescriptionReflector.Reflect(Type type, String url) +109
System.Web.Services.Protocols.DocumentationServerType..ctor(Type type, String uri) +156
System.Web.Services.Protocols.DocumentationServerProtocol.Initialize() +284
System.Web.Services.Protocols.ServerProtocol.SetContext(Type type, HttpContext context, HttpRequest request, HttpResponse response) +50
System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing) +77

[InvalidOperationException: Nie można obsłużyć żądania.]
System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing) +285
System.Web.Services.Protocols.WebServiceHandlerFactory.CoreGetHandler(Type type, HttpContext context, HttpRequest request, HttpResponse response) +183

[InvalidOperationException: Nie można obsłużyć żądania.]
System.Web.Services.Protocols.WebServiceHandlerFactory.CoreGetHandler(Type type, HttpContext context, HttpRequest request, HttpResponse response) +354
System.Web.Services.Protocols.WebServiceHandlerFactory.GetHandler(HttpContext context, String verb, String url, String filePath) +212
System.Web.Script.Services.ScriptHandlerFactory.GetHandler(HttpContext context, String requestType, String url, String pathTranslated) +47
System.Web.HttpApplication.MapHttpHandler(HttpContext context, String requestType, VirtualPath path, String pathTranslated, Boolean useAppConfig) +193
System.Web.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +93
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

O CO CHODZI I JAK TO ROZWIĄZAĆ

1 użytkowników online, w tym zalogowanych: 0, gości: 1