2013-02-11 2 views
1

Я сделал службу WCF на платформе .NET 4, что, когда я ударил ее с помощью jQuery ajax POST, он возвращает JSON. Проблема в том, что я бы предпочел, чтобы json-ответ POST не был завернут в имя метода с суффиксом результата.Bare Json ответ службы WCF в C#

Подробно:

public interface IService 
{ 
    [OperationContract] 
    [WebInvoke(Method = "POST", 
ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)] 
    Person GetInfo(string id); 
} 

[AspNetCompatibilityRequirements(RequirementsMode 
    = AspNetCompatibilityRequirementsMode.Allowed)] 
public class Service: Iservice 
{ 
    public Person GetInfo(string id) 
    { 
      ... 
      return new Person(); 
    } 
} 

public class Person 
{ 
    public string FirstName; 
    public string LastName; 

    public Person(){ 
    FirstName = "Jon"; 
    LastName = "Doe"; 
    } 
} 

web.config 
<system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 
    <behaviors> 
    <serviceBehaviors> 
     <behavior name="ServiceBehavior"> 
     <serviceMetadata httpGetEnabled="true"/> 
     <serviceDebug includeExceptionDetailInFaults="true"/> 
     </behavior> 
    </serviceBehaviors> 
    <endpointBehaviors> 
     <behavior name="EndpBehavior"> 
     <webHttp/> 
     </behavior> 
    </endpointBehaviors> 
    </behaviors> 
    <services> 
    <service behaviorConfiguration="ServiceBehavior" name="Service"> 
     <endpoint address="" binding="webHttpBinding" 
      contract="IService" behaviorConfiguration="EndpBehavior"/> 
    </service> 
    </services> 
</system.serviceModel> 

JQuery:

var myparameters = JSON.stringify({ id: $('#id').val()}); 
      $.ajax({ 
       type: "POST", 
       url: "/Service.svc/GetInfo", 
       data:myparameters, 
       contentType: "application/json", 
       dataType: "json", 
       success: function (response) { 
         ... 
        } 
       } 
      }); 

С BodyStyle = WebMessageBodyStyle.Wrapped Ответа получить в моем яваскрипта код:

{"GetInfoResult" : {"FirstName":"Jon", "LastName":"Doe"}} 

Но когда я изменить его WebMessageBodyStyle.Bare и все остальное остается неизменным, 500 внутренних ошибок сервера имеет место.

Можно ли вернуть Bare json в мой ответ POST без метода + Результат? Если да, то что я делаю неправильно?

Заранее спасибо

ответ

3

Я думаю, что WebMessageBodyStyle.Bare ожидает и «голый» запрос, и вы отправляете объект из яваскрипта кода, что-то вроде этого: {id:'value'} что будет переведено как:

public class DTObject{ 
    public string Id { get; set; } 
} 

И ваш метод работы ожидает только string как параметр.

Попробуйте сделать только ваш ответ «голым» следующим образом: WebMessageBodyStyle.WrappedRequest.

[Редактировать] http://msdn.microsoft.com/en-us/library/system.servicemodel.web.webmessagebodystyle.aspx

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