2013-04-22 6 views
8

Я создал службу wcf. Это нормально работает, когда я использую просто в .net, добавляя в качестве веб-службы. Но я хочу, чтобы он мог использовать приложение iPhone в качестве вызова JSON. Для тестирования я использовал его в .net с JSON, но не работал.Включить службу WCF для использования с JSON

Я знаю, что этот вопрос задан раньше, я искал это решение для поиска can not для меня.

моя конфигурация:

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

код интерфейса:

[ServiceContract] 
public interface IGolfPyramidService 
{ 



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

} 

Myservice.cs код:

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

я хочу, чтобы сделать возможным вызвать метод с помощью url format like: http://example.com/MyService.svc/test

+0

Почему вы используете WebInvoke На интерфейсе и не WebGet? – Erwin

+0

Спасибо за ответ .. для моего случая я хочу получить ответ в JSON, и у меня возникли проблемы с методом WebGet. Метод WebInvoke работал для меня. – Finisher001

+1

Если вы вызываете веб-сервис из браузера, вы используете GET, а не POST. – Erwin

ответ

11

Если вы новичок, то это поможет вам создать веб-службу json и xml, которая может быть использована IOS и Android.
http://www.codeproject.com/Articles/105273/Create-RESTful-WCF-Service-API-Step-By-Step-Guide

+0

У меня все еще есть небольшая проблема ... Я получаю выходные данные, но не в формате JSON. Я указал ResponseFormat = WebMessageFormat.Json, как описано в статье, но он дает результат в простом формате, а не в JSON – Finisher001

+0

вы пробовали из IOS или Android – Arshad

7

Почему вы используете метод post для получения простого строкового значения? Попробуйте этот пример, который должен нормально работать.

конфигурации

<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

, хотя предыдущий ответ сработал. Я пробовал ваше решение также с WEBGET и он работал и на меня тоже .. Проблема в моем коде, кажется, находится в 2-х местах 1. Я установил httpsgetenabled = true, теперь я изменил его на httpgetenabled = true 2. Я только что разместил ссылки в файле веб-конфигурации без namespace Я думаю, что это были проблемы – Finisher001

Смежные вопросы