【问题标题】:WCF web service can not find endpoint elementWCF Web 服务找不到端点元素
【发布时间】:2015-11-02 11:26:24
【问题描述】:

我使用这个tuto 创建了一个 WCF Restful 服务 并将其与 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 窗体应用程序中显示这些数据。

更新错误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)

【问题讨论】:

  • 访问 URL localhost:portNo/GetAllEvents 时看到的消息
  • 服务器在处理请求时遇到错误。有关详细信息,请查看服务器日志。

标签: c# wcf wcf-rest


【解决方案1】:

只要 WCF 服务出现任何问题,就会出现此问题。 所以查看问题的更多细节,你需要includeexceptiondetailInfaults属性为true在servicedebug标签。

编辑

对于那些不懂法语的人,这里是错误的意思

服务器在处理请求时遇到错误。这 异常消息是'一个可以为空的对象应该有一个值。 ' .有关详细信息,请查看服务器日志。的痕迹 异常堆栈是:

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

这意味着在您的 GetAllEvent() 中您正在尝试分配空值。 如果你在那个时候放置一个调试器,你可能会发现哪一行抛出异常

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

【讨论】:

  • 我在添加 includeexceptiondetailInfaults 后更新了我的错误问题
  • 就是这样,最后 2 个值返回 null,我评论它并且它有效
【解决方案2】:

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

阅读 this tutorial 以获得更清晰的演练。

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

【讨论】:

    猜你喜欢
    • 2023-03-24
    • 1970-01-01
    • 2012-05-07
    • 2018-07-09
    • 1970-01-01
    • 2010-12-30
    • 2019-12-10
    • 1970-01-01
    相关资源
    最近更新 更多