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.
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. –
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
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