Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 23
  1. #1

    Consiglio wcf web service

    Salve ragazzi, oggi mi sono cimentato nella creazione di un webservice WCF. Dopo averci smanettato un pò sono riuscito a creare un webservice che risiede in localhost ed a creare un sito web che richiami tramite js o jquery i servizi. Nel file Service.svc ho impostato il

    codice:
    Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory"
    Il webservice è aggiunto come riferimento al sito web client, ma putroppo se provo ad istanziarlo in codebehind mi da errore di endpoint. C'è qualche impostazione da fare?

    Webconfig WCF

    codice:
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
    
      <system.web>
        <compilation debug="false" strict="false" explicit="true" targetFramework="4.0" />
        <pages>
          <namespaces>
            <add namespace="System.Runtime.Serialization" />
            <add namespace="System.ServiceModel" />
            <add namespace="System.ServiceModel.Web" />
          </namespaces>
        </pages>
      </system.web>
      <system.serviceModel>
        <behaviors>
          <serviceBehaviors>
            <behavior>
              
              <serviceMetadata httpGetEnabled="true"/>
              
              <serviceDebug includeExceptionDetailInFaults="true"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
        <serviceHostingEnvironment multipleSiteBindingsEnabled="true"  aspNetCompatibilityEnabled="True"/>
        <standardEndpoints>
          <webScriptEndpoint>
            <standardEndpoint name="" crossDomainScriptAccessEnabled="true"/>
          </webScriptEndpoint>
        </standardEndpoints>
      </system.serviceModel>
      <system.webServer>
       <modules runAllManagedModulesForAllRequests="true"/>
      </system.webServer>
      
    </configuration>

    WebConfig sito web client

    codice:
    <?xml version="1.0"?>
    <!--
      Per ulteriori informazioni su come configurare l'applicazione ASP.NET, visitare il sito Web all'indirizzo
      http://go.microsoft.com/fwlink/?LinkId=169433
      -->
    <configuration>
    	<system.web>
    		<compilation debug="true" strict="false" explicit="true" targetFramework="4.0"/>
    	</system.web>
    	<system.serviceModel>
    		<bindings>
       <basicHttpBinding>
        <binding name="BasicHttpBinding_AjaxService" closeTimeout="00:01:00"
         openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
         allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
         maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
         messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
         useDefaultWebProxy="true">
         <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
          maxBytesPerRead="4096" maxNameTableCharCount="16384" />
         <security mode="None">
          <transport clientCredentialType="None" proxyCredentialType="None"
           realm="" />
          <message clientCredentialType="UserName" algorithmSuite="Default" />
         </security>
        </binding>
       </basicHttpBinding>
      </bindings>
    		<client>
       <endpoint address="http://localhost/tdestservice/ServiceCB.svc"
        binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_AjaxService"
        contract="JsonpAjaxServiceCB.AjaxService" name="BasicHttpBinding_AjaxService" />
      </client>
        <services>
          <service name="TestService">
            <endpoint address="soap" binding="basicHttpBinding" contract="IService"/>
            <endpoint address="json" binding="webHttpBinding"  behaviorConfiguration="jsonBehavior" contract="IService"/>
          </service>
        </services>
      </system.serviceModel>
    </configuration>
    Service.svc è quello che uso in questo momento per interfacciarmi con js e jquery. Ho aggiunto in codebehind

    codice:
    ScriptManager1.Services.Add(New System.Web.UI.ServiceReference("http://localhost/tdestservice/Service.svc"))
    Spero di aver scritto tutto quello che occore

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    120
    Potresti mettere l'errore ?
    Di runtime o di compilazione?

  3. #3
    Impossibile trovare l'elemento endpoint predefinito che fa riferimento al contratto 'JsonpAjaxService.AjaxService' nel servizio di configurazione client ServiceModel. È possibile che non sia stato trovato nessun file di configurazione per l'applicazione o che nell'elemento client non sia stato trovato un elemento endpoint corrispondente al contratto.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    120
    Separiamo i problemi
    Il servizio WCF si avvia tramite WcfSvcHost.exe?
    Se sì riesci a contattarlo con WCFTestClient.exe?

    entrambi sono tra gli strumenti di VS e li trovi in
    "C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE" ( se hai vs 2008, o nell'analoga cartella )

    In ogni caso se metti il progetto WCF come Start Up Project VS dovrebbe avviarteli entrambi se lanci il Debug ( F5 )

    questo per escludere che il problema sia nel servizio.

  5. #5
    allora,il servizio WCF si avvia perfettamente, funziona...La mia idea è quella di creare un servizio che possa essere sia richiamato in codebehind che in frontend tramite ajax (js o jquery). Ho notato questo:

    Se nel file Service.svc aggiunto la voce

    codice:
    Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory"
    in frontend mi funziona perfettamente ma in codebehind usando

    codice:
    Dim client As New JsonpAjaxService.AjaxServiceClient
    mi da l'errore che ho postato in precedenza (errore di endpoint). Invece, se nel file .svc elimino la voce factory, non mi funziona in frontend dandomi errore di chiamata ajax ma in codebehind istanzio e chiamo i metodi tranquillamente, poichè quando lo aggiungo come riferimento al progetto, nel webconfig aggiunge

    codice:
    <system.serviceModel>
    		<bindings>
       <basicHttpBinding>
        <binding name="BasicHttpBinding_AjaxService" closeTimeout="00:01:00"
         openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
         allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
         maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
         messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
         useDefaultWebProxy="true">
         <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
          maxBytesPerRead="4096" maxNameTableCharCount="16384" />
         <security mode="None">
          <transport clientCredentialType="None" proxyCredentialType="None"
           realm="" />
          <message clientCredentialType="UserName" algorithmSuite="Default" />
         </security>
        </binding>
       </basicHttpBinding>
      </bindings>
    		<client>
       <endpoint address="http://localhost/tdestservice/Service.svc"
        binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_AjaxService"
        contract="JsonpAjaxService.AjaxService" name="BasicHttpBinding_AjaxService" />
      </client>
    	</system.serviceModel>
    Come posso risolvere per poter richiamare i metodi sia in codebehid che in frontend senza dover sdoppiare i file svc?

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    120
    Non ho mai chiamato un WCF da client
    Indubbiamente la classe factory è quella che consente la chiamata ajax

    Ma quindi quando aggiungi il riferimento al progetto ed è presente la classe factory non ti compila la <ServiceModel> nel web config?
    Cioè non è definito alcun EndPoint?
    Hai provato a pensarci tu a mano?

  7. #7
    si anche se lo metto a mano mi da sempre errore di endpoint...è proprio questo che nn capisco. Ho provato anche a fare:

    codice:
            Dim elements As New BindingElementCollection()
            'elements.Add(New BinaryMessageEncodingBindingElement())
            elements.Add(New TextMessageEncodingBindingElement())
            elements.Add(New HttpTransportBindingElement())
    
            Dim binding As New CustomBinding(elements)
    
            Dim address As New EndpointAddress(New Uri("http://localhost/tdestservice/Service.svc", UriKind.Absolute))
    
            Dim client1 As New JsonpAjaxService.AjaxServiceClient(binding, address)
    
            Label1.Text = Label1.Text & client1.prova().Trim 'qui va in errore di end point
            
            client1.Close()
    
            Dim myBinding As New BasicHttpBinding()
            Dim myEndpoint As New EndpointAddress("http://localhost/tdestservice/Service.svc")
            Dim d1 As New ChannelFactory(Of JsonpAjaxService.AjaxService)(myBinding, myEndpoint)
    
            Dim d As JsonpAjaxService.AjaxService = d1.CreateChannel()
    
            Label1.Text = Label1.Text & d.prova().Trim 'qui va in errore di end point

  8. #8
    nessuno sa dirmi come si può fare o in cosa sbaglio?

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    120
    Allora, mi sembra di aver capito che i problemi nascono dall'impostazione della Factory, dovuta alla necessità di contattare l'SVC dal client ( ovvero da JS )

    Se guardi questo articolo

    http://msdn.microsoft.com/it-it/libr...=vs.90%29.aspx

    ti spiega come creare un .svc che può essere contattato da JS. Invece in quest'altro

    http://msdn.microsoft.com/it-it/libr...=vs.90%29.aspx

    trovi come contattare l'svc dalla pagina.

    ( non l'ho provato, lascio a te l'emozione e aspetto le tue considerazioni )

  10. #10
    Secondo me hai incasinato troppo le cose.
    Innanzitutto dovresti chiarire un paio di cose :
    Il file svc e l'implementazione del servizo ( Iservice.cs o sercive.cs) esistono nello stesso progetto e nella stesa cartella.
    Inoltre , il tuo sito web è un progetto o libreiria separata dal progetto ?
    Un WCF service può essere lanciato su IIS Server , come Service Host indipendente o in appdomain cioè nello dominio in cui lanci il sito web.
    Se sei alle prime armi e non hai capito cosa scrivo , fai uno screeshot del solution esplorer di Visual Studio con tutte le cartelle espanse.
    Comunque secondo me puoi fare questa cosa con due righe di codice nel web.config
    Se mi da indicazioni ti dico come fare. Ciao !!!
    Sul mio blog qualche utile risorsa per JQuery, HTML5 , CSS3 , PHP , ASP.NET , WCF SERVICE REST & SOAP ed altro ancora http://zannino1973.wordpress.com

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.