Logo UGIdotNET

Discussione '[WCF] Cos'è che non ho capito?'

# Pubblicato il 01 mar 2010 20.58 - Rispondi
Tiziano Muratore
[WCF] Cos'è che non ho capito?
Buonasera.
Col timore che mi rispondiate con un secco "NULLA" chiedo umilmente cosa non ho capito riguardo i servizi Wcf.
Ho creato una WebApplication di test, ho inserito un WCF Service, mando in esecuzione(DEBUG) l'applicazione ed all'indirizzo http://localhost:xxxx/Service1.svc riesco a visualizzare correttamente le informazioni sul servizio.
Ora .... pubblico tutto sul web(www.miosito.net) e, tentando di aggiungere un riferimento Web al servizio da una WindowsFormsApplication, ottengo un eccezione che cita testualmente:
[b]This collection already contains an address with scheme http. There can be at most one address per scheme in this collection.
Parameter name: item [/b] riferendosi, suppongo, alla [b]System.ServiceModel.UriSchemeKeyedCollection[/b]
Avreste qualche indicazione in merito?
Grazie
Muratore Tiziano
aka Jeremy
# Pubblicato il 02 mar 2010 7.39 - Rispondi
Roberto Messora
Re: [WCF] Cos'è che non ho capito?
Ciao,
così a naso direi che è un problema di file di configurazione.
In generale visualizzare la pagina principale dell'svc non è condizione sufficiente affinchè poi sia possibile aggiungere un riferimento al servizio da un client come la tua applicazione WinForm.
Se riesci dovresti per favore postare il web.config del servizio perchè così è davvero diffcile capire quale sia il problema (se devo azzardare direi che si tratta di aver indicato nel web.config due binding diversi entrambi su protocollo http che confliggono, ma ripeto è un azzardo)

Roberto
# Pubblicato il 02 mar 2010 9.26 - Rispondi
Tiziano Muratore
Re: [WCF] Cos'è che non ho capito?
Ciao e grazie per l'interessamento.
Tieni presente che,volutamente,non ho modificato nulla nel Web.config confidando in una corretta impostazione da parte di VisualStudio.
Di seguito il contenuto del Web.config.

[code]
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
<sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>
<section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
<section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
<section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
</sectionGroup>
</sectionGroup>
</sectionGroup>
</configSections>
<appSettings/>
<connectionStrings/>
<system.web>
<!--
Impostare compilation debug="true" per inserire i
simboli di debug nella pagina compilata. Poiché tale operazione ha effetto
sulle prestazioni, impostare questo valore su true
solo durante lo sviluppo.

Opzioni di Visual Basic:
Impostare strict="true" per impedire qualsiasi conversione di tipi di dati
in caso di possibile perdita di dati.
Impostare explicit="true" per imporre la dichiarazione di tutte le variabili.
-->
<compilation debug="true" strict="false" explicit="true">
<assemblies>
<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
</assemblies>
</compilation>
<pages>
<namespaces>
<clear/>
<add namespace="System"/>
<add namespace="System.Collections"/>
<add namespace="System.Collections.Generic"/>
<add namespace="System.Collections.Specialized"/>
<add namespace="System.Configuration"/>
<add namespace="System.Text"/>
<add namespace="System.Text.RegularExpressions"/>
<add namespace="System.Linq"/>
<add namespace="System.Xml.Linq"/>
<add namespace="System.Web"/>
<add namespace="System.Web.Caching"/>
<add namespace="System.Web.SessionState"/>
<add namespace="System.Web.Security"/>
<add namespace="System.Web.Profile"/>
<add namespace="System.Web.UI"/>
<add namespace="System.Web.UI.WebControls"/>
<add namespace="System.Web.UI.WebControls.WebParts"/>
<add namespace="System.Web.UI.HtmlControls"/>
</namespaces>
<controls>
<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</controls>
</pages>
<!--
La sezione <authentication> consente di configurare
la modalità di autenticazione della sicurezza utilizzata da
ASP.NET per identificare un utente in ingresso.
-->
<authentication mode="Windows"/>
<!--
La sezione <customErrors> consente di configurare
l'operazione da eseguire in caso di errore non gestito
durante l'esecuzione di una richiesta. In particolare,
consente agli sviluppatori di configurare le pagine di errore HTML
in modo che vengano visualizzate al posto dell'analisi dello stack dell'errore.

<customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
<error statusCode="403" redirect="NoAccess.htm" />
<error statusCode="404" redirect="FileNotFound.htm" />
</customErrors>
-->
<httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
</httpHandlers>
<httpModules>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</httpModules>
</system.web>
<system.codedom>
<compilers>
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" warningLevel="4" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<providerOption name="CompilerVersion" value="v3.5"/>
<providerOption name="OptionInfer" value="true"/>
<providerOption name="WarnAsError" value="false"/>
</compiler>
</compilers>
</system.codedom>
<!--
La sezione system.webServer è richiesta per eseguire ASP.NET AJAX in Internet
Information Services 7.0. Non è necessaria per la versione precedente di IIS.
-->
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules>
<remove name="ScriptModule"/>
<add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</modules>
<handlers>
<remove name="WebServiceHandlerFactory-Integrated"/>
<remove name="ScriptHandlerFactory"/>
<remove name="ScriptHandlerFactoryAppServices"/>
<remove name="ScriptResource"/>
<add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</handlers>
</system.webServer>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="WebApplication1.Service1Behavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="WebApplication1.Service1Behavior" name="WebApplication1.Service1">
<endpoint address="" binding="wsHttpBinding" contract="WebApplication1.IService1">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
</system.serviceModel>
</configuration>
[/code]

Grazie ancora.
Ciao.
Muratore Tiziano
aka Jeremy
# Pubblicato il 02 mar 2010 14.34 - Rispondi
Roberto Messora
Re: [WCF] Cos'è che non ho capito?
Ciao
da quello che vedo nel tag <<system.serviceModel> che è quello relativo alla configurazione di WCF manca il tag del binding.
se noti nel tag <services> il tuo servizio (che è anche l'unico elencato) ha un attributo "behaviorConfiguration" che rimanda alla voce relativa nel tag <serviceBehaviors> (il legame è fatto sul nome, ovvero "WebApplication1.Service1Behavior").
analogamente il tuo servizio indica come attributo "binding" il nome "wsHttpBinding" che dovrebbe far riferimento alla voce relativa all'interno del tag dei bindings (che non sono altro che il metodo di trasporto dei dati, come http, tcp, ecc.).
insomma, un client che si connette al tuo servizio non sa in che modalità connettersi.
dovresti aggiungere le informazioni sul binding

Roberto
# Pubblicato il 02 mar 2010 14.50 - Rispondi
Roberto Messora
Re: [WCF] Cos'è che non ho capito?
PS, la soluzione potrebbe anche essere più semplicemente la seguente indicata da Corrado nel suo blog:

http://blogs.ugidotnet.org/corrado/archive/2008/05/09/92593.aspx

Roberto
# Pubblicato il 02 mar 2010 15.52 - Rispondi
Tiziano Muratore
Re: [WCF] Cos'è che non ho capito?
Fantastico.
Ho risolto seguendo il post di Corrado indicatomi da te.
Grazie mille Roberto.....alla prossima
Ciao

Muratore Tiziano
aka Jeremy

© 2001 User Group Italiano UGIdotNET. Tutti i diritti riservati. Note legali. - Partita IVA 01927050185