2010-01-20 11 views
15

Ho un servizio WCF che è ospitato in IIS 7.5. Ho due server, uno per il test e uno per la produzione.WCF di hosting: accedere al file SVC, ma non può andare in collegamento wsdl

Il servizio funziona bene su server di prova, ma sul server di produzione ho il seguente errore.

Quando accedo l'indirizzo http //..../ service.svc posso vedere la pagina di default che dice:


È stato creato un servizio.

Per provare questo servizio, è necessario creare un client e utilizzarlo per chiamare il servizio. È possibile farlo utilizzando lo strumento Svcutil.exe dalla riga di comando con la seguente sintassi:

svcutil.exe http://..../service.svc?wsdl

Questo genererà un file di configurazione e un file di codice che contiene la classe client. Aggiungere i due file all'applicazione client e utilizzare la classe client generata per chiamare il servizio.


Ma quando faccio clic sul collegamento wsdl, non posso andare alla pagina wsdl. Mi riporta a questa pagina Web predefinita senza errori. Sto sospettando un errore di autorizzazione di rete/firewall ma qualcuno ha un'esperienza come questa?

impostazioni Tutto IIS sono gli stessi per i server di test e di produzione.

Grazie, Cordiali saluti.

+0

Avete configurato un endpoint mex? –

+0

sì, ho l'endpoint mex. –

+0

Hai qualche tipo di router/bilanciamento del carico di fronte al tuo servizio per introdurre problemi di reindirizzamento? –

risposta

12

È fondamentalmente bisogno di tre cose per consentire la navigazione al vostro WSDL per un servizio WCF:

  1. un comportamento di servizio che permette al servizio metadati
  2. impostare il httpGetEnabled = True su quel comportamento metadati servizio per permettere la navigazione http a che i metadati
  3. un mex endpoint sul vostro servizio

Così il vostro config sul lato server potrebbe sembra qualcosa di simile (oltre a un po 'di più stu ff):

<system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="MetadataBehavior"> 
      <serviceMetadata httpGetEnabled="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 

    <services> 
     <service behaviorConfiguration="MetadataBehavior" name="YourService"> 
     <endpoint address="" 
        binding="basicHttpBinding" 
        contract="IYourService" /> 
     <endpoint address="mex" 
        binding="mexHttpBinding" 
        contract="IMetadataExchange" /> 
     </service> 
    </services> 
    </system.serviceModel> 

punti 1 e 2 sono gestite da questa linea qui:

<serviceMetadata httpGetEnabled="true" /> 

è necessario fare riferimento che il comportamento di servizio nel tag <service> per farlo diventare attivo.

punto 3 (MEX punto finale) è questa sezione qui:

<endpoint address="mex" 
      binding="mexHttpBinding" 
      contract="IMetadataExchange" /> 

per HTTP, utilizzare il mexHttpBinding, e il contratto è un contratto IMetadataExchange sistema di WCF per lo scambio dei metadati.

+0

Sono d'accordo. Tutte queste configurazioni sono state impostate correttamente. Ho dimenticato di menzionare un dettaglio importante: il servizio funziona correttamente sul mio server di test, ma questo errore si è verificato quando ho distribuito il servizio sul mio server di produzione. Ci dispiace per l'inconvenienza. –

10

ha avuto lo stesso problema.Ho risolto con l'aggiunta di httpsGetEnabled a serviceBehaviors> comportamento come questo:

<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/> 

forse aiuta a qualcun altro. non pensate di aver bisogno di questo suggerimento dopo 4 anni =)

+1

Non riesco a revocarlo abbastanza. Il mio problema era che avevo molti servizi con WSDL funzionanti ma uno senza. Quello che non funzionava doveva essere "http ** s ** GetEnabled" (con "s") invece di "httpGetEnabled". – Turnerj

-1

Sì, il problema è con la pubblicazione dei metadati. Aggiungendo solo un altro suggerimento. È inoltre possibile aggiungere servizi metadati utilizzando il codice, come questo:

ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); 
smb.HttpGetEnabled = true; 

host.Description.Behaviors.Add(smb); 

Maggiori dettagli qui: http://msdn.microsoft.com/en-us/library/aa738489%28v=vs.110%29.aspx

1

so che risposta è così tardi, ma ho avuto lo stesso problema e la soluzione era:

Aggiungi le etichette [ServiceContract] e [OperationContract] sull'interfaccia che è implementata sul servizio .svc. Visual Studio crea un'interfaccia quando si seleziona WCF Service ma ho eliminato l'interfaccia e ho creato la mia interfaccia.

[ServiceContract] 
public interface IService1 
{ 
    [OperationContract] 
    void DoWork(); 
} 

Spero di aiutare qualcuno.

Problemi correlati