2013-08-05 48 views
0

正在嘗試很多並瀏覽,但我無法弄清楚我的WCF服務有什麼問題。WCF JSON數據在瀏覽器中沒有顯示

什麼我試圖acchive: 我builindg一個WCF那樣會暴露在HTTP

我會evenutally使用在Andorid的應用程序,以顯示數據的一些數據作爲JSON結構。

的樣機:

1)接口:

namespace WcfSyncDBService 
{ 
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "ISyncDBService" in both code and config file together. 
    [ServiceContract] 
    public interface ISyncDBService 
    { 
     [OperationContract] 
     [WebInvoke(Method = "GET", BodyStyle = WebMessageBodyStyle.Wrapped, 
          ResponseFormat = WebMessageFormat.Json, UriTemplate = "GetTodoItems")] 
     TodoItem[] GetTodoItems(); 
    } 

    [DataContract(Name = "TodoItems")] 
    public class TodoItem 
    { 
     [DataMember(Name = "Id")] 
     public int Id { get; set;} 
     [DataMember(Name = "Category")] 
     public string Category { get; set; } 
     [DataMember(Name = "Summary")] 
     public string Summary { get; set; } 
     [DataMember(Name = "Description")] 
     public string Description { get; set; } 
    } 
} 

2.)服務:

namespace WcfSyncDBService 
{ 
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "SyncDBService" in code, svc and config file together. 
    public class SyncDBService : ISyncDBService 
    { 

     public TodoItem[] GetTodoItems() 
     { 
      var context = new SyncDBEntities(); 
      var query = from i in context.todo select i; 
      var itemList = query.ToList(); 

      List<TodoItem> todoList = new List<TodoItem>(); 

      foreach (var item in itemList) 
      { 
       TodoItem i = new TodoItem 
           { 
            Id = item.C_id, 
            Category = item.category, 
            Summary = item.summary, 
            Description = item.description 
           }; 
       todoList.Add(i); 
      } 
      return todoList.ToArray(); 
     } 
    } 
} 

3.)網絡配置:

<?xml version="1.0"?> 
<configuration> 

    <system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
    </system.web> 
    <system.serviceModel> 
    <services> 
     <service name="WcfSyncDBService.SyncDBService"> 
      <!-- Service Endpoints --> 
      <!-- Unless fully qualified, address is relative to base address supplied above --> 
      <endpoint address="" binding="webHttpBinding" contract="WcfSyncDBService.ISyncDBService" behaviorConfiguration="web" /> 
     </service> 
    </services> 
    <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="true"/> 
      </behavior> 
     </serviceBehaviors> 
    <endpointBehaviors> 
     <behavior name="web"> 
      <webHttp/> 
     </behavior> 
    </endpointBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 
<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    </system.webServer> 
    <connectionStrings> 
     <add name="SyncDBEntities" connectionString="metadata=res://*/SyncDBmodel.csdl|res://*/SyncDBmodel.ssdl|res://*/SyncDBmodel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=SyncDB;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 
</configuration> 

當我運行的服務,我得到的定義和WSDL:

http://localhost:18131/SyncDBService.svc 

但是當我嘗試調用的函數http://localhost:18131/SyncDBService.svc/GetTodoItems/我得到一個錯誤「端點沒有找到。」

我知道錯誤可能是在web.config中,但我根本沒有發現它希望有人可以幫助我。

EDIT1:(溼婆的sugesstion後的web.config)

<?xml version="1.0"?> 
<configuration> 

    <system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
    </system.web> 
    <system.serviceModel> 
    <services> 
     <service name="WcfSyncDBService.SyncDBService"> 
      <!-- Service Endpoints --> 
      <!-- Unless fully qualified, address is relative to base address supplied above --> 
      <endpoint address="" binding="webHttpBinding" contract="WcfSyncDBService.ISyncDBService" behaviorConfiguration="web" /> 
     </service> 
    </services> 
    <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="true"/> 
      </behavior> 
     </serviceBehaviors> 
    <endpointBehaviors> 
     <behavior name="web"> 
      <webHttp/> 
     </behavior> 
    </endpointBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true"> 
     <serviceActivations> 
      <add relativeAddress="SyncDBService.svc" service="WcfSyncDBService.SyncDBService" /> 
     </serviceActivations> 
    </serviceHostingEnvironment> 
    </system.serviceModel> 
<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    </system.webServer> 
    <connectionStrings> 
     <add name="SyncDBEntities" connectionString="metadata=res://*/SyncDBmodel.csdl|res://*/SyncDBmodel.ssdl|res://*/SyncDBmodel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=SyncDB;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 
</configuration> 
+0

對不起這是我作爲newbish我打電話的http://本地主機:18131/SyncDBService.svc/GetTodoItems /而不是http:// localhost:18131/SyncDBService.svc/GetTodoItems – Jester

回答

0

您需要配置服務的主機上相對地址,

<serviceHostingEnvironment multipleSiteBindingsEnabled="true"> 
     <serviceActivations> 
      <add relativeAddress="SyncDBService.svc" service="WcfSyncDBService.SyncDBService" /> 
     </serviceActivations> 
    </serviceHostingEnvironment> 
+0

感謝您的消化,但仍然是同樣的問題,我添加了您在上面取得的代碼 – Jester

相關問題