2012-10-16 4 views
0

J'ai un simple service Web que j'ai créé. J'utilise Visual Studio 2012 .NET 4.5.404 Erreur lors de la tentative d'exécution du service Web

Voici le contrat de service:

using System.Runtime.Serialization; 
using System.ServiceModel; 

namespace GEMS.Core.WCFService 
{ 
    [ServiceContract] 
    public interface IMenuService 
    { 
     [OperationContract] 
     void AddMenuItem(string menuId, string parentId, string title, string description, string url); 
     [OperationContract] 
     void UpdateMenuItem(string menuId, string parentId, string title, string description, string url); 
     [OperationContract] 
     void DeleteMenuItem(string menuId); 
     [OperationContract] 
     MenuEntry[] GetAllMenuItems(); 
    } 

    [DataContract] 
    public class MenuEntry 
    { 
     [DataMember] 
     public string MenuId { get; internal set; } 
     [DataMember] 
     public string ParentId { get; internal set; } 
     [DataMember] 
     public string Title { get; internal set; } 
     [DataMember] 
     public string Description { get; internal set; } 
     [DataMember] 
     public string Url { get; internal set; } 
    } 
} 

La partie pertinente du app.config est:

<system.serviceModel> 
    <services> 
    <service name="GEMS.Core.WCFService.MenuService"> 
     <host> 
     <baseAddresses> 
      <add baseAddress="http://localhost:8020/GEMS.Core.WCFService/MenuService/" /> 
     </baseAddresses> 
     </host> 
     <endpoint address="" binding="basicHttpBinding" contract="GEMS.Core.WCFService.IMenuService" > 
     <identity> 
      <dns value="localhost"/> 
     </identity> 
     </endpoint> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
    </service> 
    </services> 
    <behaviors> 
    <serviceBehaviors> 
     <behavior> 
     <serviceMetadata httpGetEnabled="True" httpsGetEnabled="True"/> 
     <serviceDebug includeExceptionDetailInFaults="False" /> 
     </behavior> 
    </serviceBehaviors> 
    </behaviors> 
</system.serviceModel> 

je publie sur mon serveur IIS (local à ma boîte).

Dans l'application cliente, je crée une référence de service. Lorsque je clique sur Discover, il trouve:

http://localhost:8020/GEMS.Core.WCFService/MenuService/mex 

Quand je lance mon client, cependant, je reçois le message suivant:

There was no endpoint listening at: 
http://localhost:8020/GEMS.Core.WCFService/MenuService/ that could 
accept the message. This is often caused by an incorrect address or 
SOAP action. See InnerException, if present, for more details. 

L'exception interne dit simplement qu'il a une erreur 404 à partir du Web serveur.

fichier .config a le xml auto-généré suite du client:

<system.serviceModel> 
    <bindings> 
    <basicHttpBinding> 
     <binding name="BasicHttpBinding_IMenuService" /> 
    </basicHttpBinding> 
    </bindings> 
    <client> 
    <endpoint address="http://localhost:8020/GEMS.Core.WCFService/MenuService/" 
     binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IMenuService" 
     contract="WCF_MenuService.IMenuService" name="BasicHttpBinding_IMenuService" /> 
    </client> 
</system.serviceModel> 

J'ai tourner en rond pendant des heures et ne peut pas comprendre ce que j'ai glitched, mais sûrement J'ai mal fait quelque chose.

Vous n'êtes pas sûr que cela soit important, mais le client est une application ASP.NET MVC.

+4

Pouvez-vous essayer de naviguer vers le service lui-même dans un navigateur Web sans utiliser le client. Si vous ne voyez pas la page Web WCF habituelle, vous devrez probablement activer l'activation HTTP WCF (et d'autres éléments) dans les fonctionnalités de Windows. –

+0

Il y a certainement des choses étranges qui se passent dans plusieurs domaines. Tout d'abord, le Discovery obtient la mauvaise URL. L'URL réelle est: localhost/GEMS.Core.WCFService.MenuService.svc De plus, lorsque je génère la référence de service, elle ne crée pas la classe. Si, cependant, je crée une application de console simple et l'ai créé la référence de service, cela fonctionne très bien (donné l'URL appropriée ci-dessus). Je ne suis pas sûr à 100%, mais il semble que Newtonsoft.json pourrait causer de la pêche. – Pete

+0

Toujours essayer de tout faire fonctionner, mais jusqu'à présent, la première étape consistait à créer le client de service dans une autre application, puis le copier sur ma vraie application et modifier les références d'espace de noms. Cela ressemble peut-être à un problème VS.NET. – Pete

Répondre

1

Comme l'explique Pete Newtonsoft.json.dll, le client ne génère pas le code de service. Vous pouvez soit supprimer la DLL, puis ajouter à nouveau la référence de service.

Ou vous pouvez essayer la solution suivante qui a fonctionné pour moi. Lorsque vous ajoutez une référence de service,

  1. Cliquez sur le « Avancé ... » bouton dans le « Ajouter une référence de service » - fenêtre
  2. « types de réutilisation dans les assemblages référencés » Désactiver.

Ensuite, vos classes devraient être générées.

Questions connexes