2013-04-22 7 views
8

Ich habe einen WCF-Dienst erstellt. Das funktioniert gut, wenn ich einfach in .net als Webservice hinzufüge. Aber ich möchte es für iPhone-App als JSON-Aufruf verwenden können. Zum Testen habe ich es in .net mit JSON verwendet, aber es funktioniert nicht.Aktivieren Sie den WCF-Dienst für die Verwendung mit JSON

Ich weiß, dass diese Art von Frage vor gefragt wird, ich habe nach dieser Lösung gesucht, kann für mich finden.

meine Konfiguration:

<system.serviceModel> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="servicebehavior"> 
     <serviceMetadata httpsGetEnabled="true" /> 
    </behavior> 
    </serviceBehaviors> 
    <endpointBehaviors> 
    <behavior name="endpointBehavior"> 
     <enableWebScript /> 
     <webHttp defaultBodyStyle="Wrapped" defaultOutgoingResponseFormat="Json" /> 
    </behavior> 
    </endpointBehaviors> 

</behaviors> 
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 
<services> 
    <service name="MyService" behaviorConfiguration="servicebehavior"> 
    <endpoint address="" 
       behaviorConfiguration="endpointBehavior" 
       binding="webHttpBinding" 
       contract="IMyService" /> 
    </service> 
</services> 

Interface-Code:

[ServiceContract] 
public interface IGolfPyramidService 
{ 



    [WebInvoke(UriTemplate = "/Test", Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)] 
    [OperationContract] 
    string Test(); 

} 

Myservice.cs Code:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
public class MyService : IMyService 
{   
    public string Test() 
    { 
     return "success"; 
    } 
} 

ich es machen wollen möglich, das Verfahren zu nennen verwenden URL-Format wie: http://example.com/MyService.svc/test

+0

Warum verwenden Sie WebInvoke auf Ihrer Schnittstelle und WebGet nicht? – Erwin

+0

Danke für die Antwort .. für meinen Fall möchte ich Antwort in JSON bekommen und ich bekam Probleme mit WebGet-Methode. Die WebInvoke-Methode hat für mich funktioniert. – Finisher001

+1

Wenn Sie den Webservice vom Browser aus aufrufen, verwenden Sie GET, nicht POST. – Erwin

Antwort

11

Wenn Sie Anfänger sind, dann wird dies Sie führen erstellen JSON und Xml aktiviert Web-Service, der von IOS und Android verbraucht werden kann.
http://www.codeproject.com/Articles/105273/Create-RESTful-WCF-Service-API-Step-By-Step-Guide

+0

Ich habe immer noch ein kleines Problem ... Ich gebe die Ausgabedaten, aber nicht im JSON-Format. Ich habe ResponseFormat = WebMessageFormat.Json angegeben, wie im Artikel beschrieben, aber es gibt Ergebnis in einfachem Format nicht in JSON – Finisher001

+0

hast du versucht von IOS oder Android – Arshad

7

Warum verwenden Sie eine Post-Methode, um einen einfachen Zeichenfolgenwert zu erhalten? Versuchen Sie dieses Beispiel, das normalerweise funktionieren sollte.

Konfiguration

<system.serviceModel> 
<services> 
    <service behaviorConfiguration="RestServiceBehavior" name="WcfService1.MyService"> 
    <endpoint address="" behaviorConfiguration="web" binding="webHttpBinding" bindingConfiguration="webHttpBindingWithJSONP" contract="WcfService1.IMyService" /> 
    </service> 
</services> 
<bindings> 
    <webHttpBinding> 
    <binding name="webHttpBindingWithJSONP" /> 
    </webHttpBinding> 
</bindings> 
<behaviors> 
    <endpointBehaviors> 
    <behavior name="web"> 
     <webHttp /> 
    </behavior> 
    </endpointBehaviors> 
    <serviceBehaviors> 
    <behavior name="RestServiceBehavior"> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="false"/> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 

IMyService.cs

namespace WcfService1 
{ 
[ServiceContract] 
public interface IMyService 
{ 
    [WebGet(UriTemplate = "Test", 
     ResponseFormat = WebMessageFormat.Json 
    )] 
    [OperationContract] 
    string Test(); 
} 
} 

MyService.svc.cs

namespace WcfService1 
{ 
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
public class MyService : IMyService 
{ 
    public string Test() 
    { 
     return "Test"; 
    } 
} 
} 
+0

obwohl vorherige Antwort funktioniert .. Ich habe deine Lösung auch das ist mit WEBGET und es funktioniert für mich auch .. Das Problem in meinem Code scheint an 2 Orten zu sein 1. Ich habe httpsgetenabled = true jetzt habe ich es zu httpgetenabled = true 2. Ich hatte nur Referenzen in Web-Konfigurationsdatei ohne gesetzt Namespace Ich denke, das waren beide die Probleme – Finisher001

Verwandte Themen