I Create a WCF Restful Service using this tuto and connect it with SQL server DB to get data and the service was created and it works, but the problem it can not find endpoint element this is my code EventDataContract
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Web;
namespace WCFEventsSchedule
{
[DataContract]
public class EventDataContract
{
[DataMember]
public int EventID { get; set; }
[DataMember]
public string Text { get; set; }
[DataMember]
public DateTime Start_Date { get; set; }
[DataMember]
public DateTime End_Date { get; set; }
[DataMember]
public int Room_Id { get; set; }
[DataMember]
public int User_Id { get; set; }
}
}
IEventService
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
namespace WCFEventsSchedule
{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IEventService" in both code and config file together.
[ServiceContract]
public interface IEventService
{
[OperationContract]
[WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json, UriTemplate = "/GetAllEvents/")]
List<EventDataContract> GetAllEvent();
[OperationContract]
[WebGet(RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
UriTemplate = "/EventDetails/{EventID}")]
EventDataContract EventDetails(string EventID);
}
}
EventService.svc
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using WCFEventsSchedule.Model;
namespace WCFEventsSchedule
{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "EventService" in code, svc and config file together.
// NOTE: In order to launch WCF Test Client for testing this service, please select EventService.svc or EventService.svc.cs at the Solution Explorer and start debugging.
public class EventService : IEventService
{
SchedulerEntities se;
public EventService()
{
se = new SchedulerEntities();
}
public List<EventDataContract> GetAllEvent()
{
var query = (from a in se.Events
select a).Distinct();
List<EventDataContract> EventList = new List<EventDataContract>();
query.ToList().ForEach(x =>
{
EventList.Add(new EventDataContract
{
EventID = x.id,
Text = x.text,
Start_Date = x.start_date,
End_Date = x.end_date,
Room_Id = (int) x.room_id,
User_Id = (int) x.user_id,
});
});
return EventList;
}
public EventDataContract EventDetails(string EventID)
{
EventDataContract even = new EventDataContract();
try
{
var query = (from a in se.Events
where a.id.Equals(EventID)
select a).Distinct().FirstOrDefault();
even.EventID = query.id;
even.Text = query.text;
even.Start_Date = query.start_date;
even.End_Date = query.end_date;
even.Room_Id = (int) query.room_id;
even.User_Id = (int) query.user_id;
}
catch (Exception ex)
{
throw new FaultException<string>(ex.Message);
}
return even;
}
}
}
Web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
</system.web>
<system.serviceModel>
<services>
<service name="WCFEventsSchedule.EventService" behaviorConfiguration="serviceBehavior" >
<endpoint address=""
binding="webHttpBinding"
contract="WCFEventsSchedule.IEventService"
behaviorConfiguration="web">
</endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="serviceBehavior">
<!-- To avoid disclosing metadata information, set the values below to false before deployment -->
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="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 name="web">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
<protocolMapping>
<add binding="webHttpBinding" scheme="https" />
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<!--
To browse web app root directory during debugging, set the value below to true.
Set to false before deployment to avoid disclosing web app folder information.
-->
<directoryBrowse enabled="true" />
</system.webServer>
<connectionStrings>
<add name="SchedulerEntities" connectionString="metadata=res://*/Model.EventsModel.csdl|res://*/Model.EventsModel.ssdl|res://*/Model.EventsModel.msl;provider=System.Data.SqlClient;provider connection string="data source=(LocalDB)\v11.0;attachdbfilename=|DataDirectory|\Scheduler.mdf;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="mssqllocaldb" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
</configuration>
My table Events
CREATE TABLE [dbo].[Events] (
[id] INT IDENTITY (1, 1) NOT NULL,
[text] TEXT COLLATE Cyrillic_General_CI_AS NULL,
[start_date] DATETIME NOT NULL,
[end_date] DATETIME NOT NULL,
[room_id] INT NULL,
[user_id] INT NULL,
CONSTRAINT [PK_Events] PRIMARY KEY CLUSTERED ([id] ASC)
);
and later I will show that data on Windows Form Application using WCF.
updated error fater add [ServiceBehavior(IncludeExceptionDetailInFaults = true)]
Le serveur a rencontré une erreur lors du traitement de la demande. Le message d'exception est 'Un objet qui autorise la valeur Null doit posséder une valeur.'. Pour plus d'informations, consultez les journaux du serveur. La trace de la pile d'exception est :
à System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource) à System.Nullable`1.get_Value() à WCFEventsSchedule.EventService.<>c__DisplayClass2.<GetAllEvent>b__1(Events x) dans c:\Users\juste 3al faza\Desktop\Scheduler.MVC5\WCFEventsSchedule\EventService.svc.cs:ligne 31 à System.Collections.Generic.List`1.ForEach(Action`1 action) à WCFEventsSchedule.EventService.GetAllEvent() dans c:\Users\juste 3al faza\Desktop\Scheduler.MVC5\WCFEventsSchedule\EventService.svc.cs:ligne 29 à SyncInvokeGetAllEvent(Object , Object[] , Object[] ) à System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs) à System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc) à System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc) à System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc& rpc) à System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc) à System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc) à System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc) à System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& rpc) à System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc) à System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc& rpc) à System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)
This issue comes into picture whenever there is any issue at WCF service.
So see more details about the issue, you need to includeexceptiondetailInfaults
attribute to true in servicedebug tag.
EDIT
for those who dont understand french here's what the error translates to
The server encountered an error while processing the request . The exception message is ' An object that nullable should have a value. ' . For more information , check the server logs . The trace of the exception stack is :
System.ThrowHelper.ThrowInvalidOperationException ( ExceptionResource resource) to System.Nullable1.get_Value () to WCFEventsSchedule.EventService . <> c__DisplayClass2 . < GetAllEvent > b__1 ( Events x )
It means that in your GetAllEvent() you are trying to assign null value. If you put a debugger at that point you may find out which line is throwing exception
(Hint: its mostly those values which are not supposed to be NULL)