Buongiorno a tutti. Sto cominciando a studiare i servizi WCF per riuscire a svolgere determinate operazioni.
Ho creato il mio servizio il quale funziona bene fino ad un certo punto.
Il servizio in realtà si collega ad un database MySql e mi restituisce attraverso una funzione una list di un dato complesso. Il codice che utilizzo è il seguente
Questa è l'iterface:
<ServiceContract()>
Public Interface IMyPimmService
<OperationContract()>
Function GetCommesse() As List(Of MyCommessa)
End Interface
<DataContract()>
Public Class MyCommessa
<DataMember()>
Public Property Commessa_Id As String
<DataMember()>
Public Property Descrizione As String
<DataMember()>
Public Property ListaSchede As List(Of MyScheda)
End Class
<DataContract()>
Public Class MyScheda
<DataMember()>
Public Property CodiceScheda As String
<DataMember()>
Public Property DescrizioneScheda As String
End Class
Questo il codice del Servizio
Public Class MyPimmService
Implements IMyPimmService
Private PimmContext As PimmEntities
Public Sub New()
End Sub
Public Function GetCommesse() As List(Of MyCommessa) Implements IMyPimmService.GetCommesse
PimmContext = New PimmEntities
Dim Query = From c In PimmContext.commesses Where c.stato_commessa_id.StartsWith("A") Select c
Dim listaCommesse As New List(Of MyCommessa)
For Each q In Query.ToList
Dim lisScheda As New List(Of MyScheda)
For Each s In q.schedas.ToList
lisScheda.Add(New MyScheda With {.CodiceScheda = s.codskcl, .DescrizioneScheda = s.descrizione})
Next
listaCommesse.Add(New MyCommessa With {.Commessa_Id = q.commessa_id, .Descrizione = q.descrizione, .ListaSchede = lisScheda})
Next
'Codice che funziona correttamente
'Dim listasc As New List(Of MyScheda)
'listasc.Add(New MyScheda With {.CodiceScheda = "SA-Test1", .DescrizioneScheda = "Scheda1 di Test"})
'listasc.Add(New MyScheda With {.CodiceScheda = "SA-Test2", .DescrizioneScheda = "Scheda2 di Test"})
'listasc.Add(New MyScheda With {.CodiceScheda = "SA-Test3", .DescrizioneScheda = "Scheda3 di Test"})
'listaCommesse.Add(New MyCommessa With {.Commessa_Id = "CA-Test", .Descrizione = "Commessa di test", .ListaSchede = listasc})
Return listaCommesse
End Function
End Class
L'errore che mi viene restituito quando richiamo la funzione GetCommesse è che ho superato il limite massimo del maxreceivedmessagesize perciò ho provato a modificarlo nel file web.config ma l'errore rimane sempre. Fatto strano è che ho impostato il parametro uguale a 655360 ma nell'errore mi dice che ho superato i 65536.
Dato che sono all'inizio penso di sbagliare qualcosa nel file di configurazione.
Questo è il file di configurazione
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation debug="true" strict="false" explicit="true" targetFramework="4.6.2" />
<httpRuntime targetFramework="4.6.2" />
</system.web>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding closeTimeout="01:00:00" openTimeout="01:00:00" receiveTimeout="01:00:00"
sendTimeout="01:00:00" maxReceivedMessageSize="655360" />
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
<dataContractSerializer maxItemsInObjectGraph="2147483646"/>
</behavior>
</serviceBehaviors>
</behaviors>
<protocolMapping>
<add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<directoryBrowse enabled="true" />
</system.webServer>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
</providers>
</entityFramework>
<system.data>
<DbProviderFactories>
<remove invariant="MySql.Data.MySqlClient" />
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
<connectionStrings>
<add name="PimmEntities" connectionString="metadata=res://*/PimmModel.csdl|res://*/PimmModel.ssdl|res://*/PimmModel.msl;provider=MySql.Data.MySqlClient;provider connection string="server=localhost;user id=pimm;password=MyPassword;database=Mydb;" providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
Da quello che ho capito facendo alcune ricerche è quello di impostare correttamente l'endpoint e collegarlo alla configurazione basicHttpBindig ma essendo alle prime armi non ho capito bene come funziona e cosa fare.
Potreste darmi un aiuto.
Dove posso trovare una guida per capire come configurare correttamente il file Web.config?
Vi ringrazio tutti per il vostro aiuto.