2013-08-05 50 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

相关问题