2013-04-22 17 views
8

Utworzono usługę wcf. Działa to dobrze, gdy używam po prostu w .net, dodając jako serwis internetowy. Ale chcę, aby był on w stanie używać aplikacji na iPhone'a jako połączenia JSON. Do testowania użyłem go w .net z JSON, ale nie działa.Włącz usługę WCF do użycia z JSON

Wiem, że tego rodzaju pytanie jest zadawane wcześniej, szukałem w tym nie mogę znaleźć rozwiązanie dla mnie.

moja konfiguracja:

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

kod interfejs:

[ServiceContract] 
public interface IGolfPyramidService 
{ 



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

} 

Myservice.cs Kod:

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

chcę, aby umożliwić wywołanie metody za pomocą Format adresu URL: http://example.com/MyService.svc/test

+0

Dlaczego używasz WebInvoke Na interfejsie i nie WebGet? – Erwin

+0

Dzięki za odpowiedź .. dla mojej sprawy chcę uzyskać odpowiedź w JSON i miałem problemy z Metodą WebGet. Dla mnie działa metoda WebInvoke. – Finisher001

+1

Jeśli wywołasz usługę internetową z przeglądarki, której używasz GET, a nie POST. – Erwin

Odpowiedz

11

Jeśli jesteś początkujący, to poprowadzi Cię on do utworzenia usługi internetowej json i xml, która może być używana przez IOS i Androida.
http://www.codeproject.com/Articles/105273/Create-RESTful-WCF-Service-API-Step-By-Step-Guide

+0

nadal mam mały problem ... otrzymuję dane wyjściowe, ale nie w formacie JSON. Mam określony ResponseFormat = WebMessageFormat.Json, jak opisano w artykule, ale daje wynik w prostym formacie nie w JSON – Finisher001

+0

próbowałem z IOS lub Android – Arshad

7

Dlaczego używasz metody post, aby uzyskać prostą wartość ciągu? Spróbuj tego przykładu, który normalnie powinien działać.

konfiguracyjne

<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

choć poprzednia odpowiedź działała dla .. Próbowałem Twojego rozwiązania, również z WEBGET i to działało również dla mnie .. Problem w moim kodzie wydaje się być w 2 miejscach 1. Ustawiłem httpsgetenabled = true teraz zmieniłem go na httpgetenabled = true 2. właśnie umieściłem odniesienia w pliku konfiguracyjnym sieci bez przestrzeń nazw Myślę, że oba te problemy były – Finisher001

Powiązane problemy