2012-04-12 3 views
3

Я создаю скелетный алгоритм успокаивающего обслуживания, показывающий, как обрабатывать сообщение и получать запросы. из моего примера get работает нормально, однако почта не работает. я думаю, я должен добавить материал в web.config, но я не знаю, что и почему. Заранее спасибо, Золи.wcf restful service config error

[ServiceContract] 
public interface IRestfulService 
{ 
    [OperationContract] 
    [WebGet(UriTemplate = "/GetAStudent")] 
    Student GetExistingStudent(); 

    [OperationContract] 
    [WebInvoke(UriTemplate = "/GetTheGivenStudent/{studentName}", Method = "POST")] 
    Student GetGivenStudent(string studentName); 
} 



public class RestfulService : IRestfulService 
{ 
    public Student GetExistingStudent() 
    { 
     Student stdObj = new Student 
     { 
      StudentName = "Foo", 
      Age = 29, 
      Mark = 95 
     }; 
     return stdObj; 
    } 

    public Student GetGivenStudent(string studentName) 
    { 
     Student stdObj = new Student 
     { 
      StudentName = studentName, 
      Age = 29, 
      Mark = 95 
     }; 
     return stdObj; 
    } 
} 

[DataContract] 
public class Student 
{ 
    [DataMember] 
    public string StudentName { get; set; } 
    [DataMember] 
    public int Age { get; set; } 
    [DataMember] 
    public double Mark { get; set; } 
} 

web.config:

<system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
</system.web> 
<system.serviceModel> 
    <protocolMapping> 
     <add scheme="http" binding="webHttpBinding"/> 
    </protocolMapping> 


    <behaviors> 
     <serviceBehaviors> 
      <behavior> 
       <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
       <serviceMetadata httpGetEnabled="true"/> 
       <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
       <serviceDebug includeExceptionDetailInFaults="false"/> 
      </behavior> 

     </serviceBehaviors> 
     <endpointBehaviors> 
      <behavior> 
       <webHttp /> 
      </behavior > 
     </endpointBehaviors> 

    </behaviors> 


    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
</system.serviceModel> 
<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
</system.webServer> 

+2

какой из них вы ожидаете работать как POST? первый не имеет объявленного метода, а другой только GET – Michel

+2

Какое исключение вы получаете? –

+0

Я изменил сообщение. теперь это правильно, я ожидаю, что второй будет работать как должность. Ошибка, которую я получаю, такова: конечная точка не найдена –

ответ

0

Вам не нужно подвергать MEX конечной точки для службы REST. Ваш web.config должен выглядеть примерно так:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
    </system.web> 
    <system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 
    <services> 
     <service name="BookService"> 

     <!-- Expose an XML endpoint: --> 
     <endpoint name="xml" 
       address="xml" 
       binding="webHttpBinding" 
       contract="BookStore.Contracts.IBookService" 
       behaviorConfiguration="poxBehavior" /> 

     <!-- Expose a JSON endpoint: --> 
     <endpoint name="json" 
       address="json" 
       binding="webHttpBinding" 
       contract="BookStore.Contracts.IBookService" 
       behaviorConfiguration="jsonBehavior" /> 
     </service> 
    </services> 
    <behaviors> 
     <endpointBehaviors> 
     <behavior name="poxBehavior"> 
      <webHttp /> 
     </behavior> 
     <endpointBehaviors> 
     <behavior name="jsonBehavior"> 
      <enableWebScript /> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    </system.serviceModel> 
</configuration> 

выше разоблачить бы две конечные точки, один, который использует данные XML, и один, который использует JSON. Таким образом, выставление двух конечных точек, таких как, конечно, совершенно необязательно; это всего лишь пример того, что вы могли бы сделать.

Я также хотел бы использовать маршрутизацию для служб REST; что-то, как в ваших Global.asax.cs:

protected void Application_Start(object sender, EventArgs e) 
{ 
    RouteTable.Routes.Add(
     new System.ServiceModel.Activation.ServiceRoute("books", 
      new System.ServiceModel.Activation.WebServiceHostFactory(), 
      typeof(BookStore.Services.BookService) 
     ) 
    ); 
} 

Который, используя вышеуказанные конечные точки в примере web.config, позволит сервис доступен как это:

http://yourdomain.com/books/xml 

и если вы выберите или добавьте конечную точку json, например:

http://yourdomain.com/books/json 
Смежные вопросы