2009-09-19 4 views
4

je suivais cela pour créer un service Web JSON en asp.net 3.5:Erreur lors de la tentative de créer un service web JSON dans asp.net

Creating JSON-enabled WCF services in .NET 3.5 (archive.org)

(était à: http://www.pluralsight.com/community/blogs/fritz/archive/2008/01/31/50121.aspx)

Il fonctionne très bien Si je veux l'utiliser en interne, mais comme je veux me connecter à l'externe, j'ai reçu une erreur disant: "La publication de métadonnées pour ce service est actuellement désactivée." J'ai donc essayé de l'activer mais maintenant j'obtiens l'erreur: "Impossible d'ajouter l'extension de comportement 'serviceMetadata' au comportement du noeud final 'MyServiceAspNetAjaxBehavior' car le type de comportement sous-jacent n'implémente pas l'interface IEndpointBehavior.".

Je sais que je fais quelque chose de mal dans web.config, je n'arrive pas à comprendre, qu'est-ce que je fais de mal? Merci!

C'est dans web.config:

<system.serviceModel> 
<behaviors> 
    <endpointBehaviors> 
    <behavior name="MyServiceAspNetAjaxBehavior"> 
     <enableWebScript /> 
     <serviceMetadata httpGetEnabled="true" /> 
    </behavior> 
    </endpointBehaviors> 
</behaviors> 

//Needed to add this to be able to use the web service on my shared host 
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"> 
    <baseAddressPrefixFilters> 
    <add prefix="http://www.domain.com"/> 
    </baseAddressPrefixFilters> 
</serviceHostingEnvironment> 

<services> 
    <service name="MyService"> 
    <endpoint address="" behaviorConfiguration="MyServiceAspNetAjaxBehavior" binding="webHttpBinding" contract="MyService" /> 
    <endpoint contract="MyService" binding="mexHttpBinding" address="mex" /> 

    </service> 
</services> 

En MyService.cs:

using System; 
using System.Linq; 
using System.Runtime.Serialization; 
using System.ServiceModel; 
using System.ServiceModel.Activation; 
using System.ServiceModel.Web; 

[ServiceContract(Namespace = "")] 
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
public class MyService 
{ 
    [OperationContract] 

    public string GetForecast(string str) 
    { 
     return "Hello World"; 
    } 
} 

Dans MyService.svc

<%@ ServiceHost Language="C#" Debug="true" Service="MyService" CodeBehind="~/App_Code/MyService.cs" %> 

Répondre

1

Votre point final MEX (le un pour l'échange de métadonnées) sous la direction d'avoir un contrat spécifique, compte tenu du système IMetadataExchange (que vous avez mal dans votre config):

<services> 
    <service name="MyService"> 
    <endpoint 
     address="" 
     behaviorConfiguration="MyServiceAspNetAjaxBehavior" 
     binding="webHttpBinding" 
     contract="MyService" /> 
    <endpoint 
     address="mex" 
     binding="mexHttpBinding" 
     contract="IMetadataExchange" /> 
    </service> 
</services> 

Avec ce contrat, vous devriez être en mesure de voir vos métadonnées. Un avertissement cependant: les services RESTful n'exposent généralement pas de métadonnées comme un WSDL ou un XSD - c'est un concept SOAP, vraiment.

Marc

+0

Merci j'ai changé à: mais obtient toujours la même erreur, ai-je besoin de changer quelque chose dans mon web fichier de service? –

+0

Je veux juste qu'un simple service web json soit appelé depuis mon iphone, n'est-ce pas possible avec asp.net? Y a-t-il quelque chose qui me manque ici? –

+0

Oui c'est possible - vous ne pouvez pas avoir de métadonnées associées (les services REST ne connaissent pas ce concept) –

Questions connexes