繁体   English   中英

WCF Web服务找不到端点元素

[英]WCF web service can not find endpoint element

我使用此Tuto创建了WCF Restful Service,并将其与SQL Server DB连接以获取数据,并且该服务已创建并且可以运行,但是无法找到终结点元素的问题是我的代码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=&quot;data source=(LocalDB)\v11.0;attachdbfilename=|DataDirectory|\Scheduler.mdf;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" 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>

我的餐桌活动

    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)
);

稍后,我将使用WCF在Windows窗体应用程序上显示该数据。

更新后的错误添加[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)

我不确定是什么问题,但是我怀疑您的web.config文件有问题。

阅读本教程,以获得更清晰的演练。

它清楚地显示了需要更改的web.config的两个部分,以使其正常工作。

只要WCF服务出现任何问题,此问题就会浮现。 因此,请查看有关此问题的更多详细信息,您需要在servicedebug标记includeexceptiondetailInfaults属性包括为true

编辑

对于那些不懂法语的人,这就是错误的含义

服务器在处理请求时遇到错误。 异常消息为'可为空的对象应具有值。 '。 有关更多信息,请检查服务器日志。 异常堆栈的跟踪为:

System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource资源)到System.Nullable1.get_Value()到WCFEventsSchedule.EventService。 <> c__DisplayClass2。 <GetAllEvent> b__1(事件x)

这意味着在GetAllEvent()中,您尝试分配空值。 如果此时放置调试器,则可能会发现哪一行引发异常

(提示:主要是那些不应为NULL的值)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM