【问题标题】:Endpoints when adding assembly references?添加程序集引用时的端点?
【发布时间】:2012-08-26 14:02:49
【问题描述】:

我有一个使用类库引用的 WCF 服务。该库中的类执行与数据库交互之类的操作。我正在通过浏览器使用 restful 调用测试我的服务(编译时没有错误),它只显示一个页面,上面简单地显示“找不到端点。”。我假设这与库引用连接字符串和应用程序设置等(我通常必须包含在使用该库的应用程序中)这一事实有关。所以我很难找到的是如何正确配置 wcf 服务以使用这个库。我尝试简单地将连接字符串和应用程序设置添加到 wcf web.config,但这似乎没有帮助。我觉得这只是通过服务的端点部分添加对库的引用。但我迷路了。任何帮助表示赞赏。谢谢

<system.serviceModel>
    <services>
      <service name="RestService.RestServiceImpl" behaviorConfiguration="ServiceBehavior">
        <endpoint address="" binding="webHttpBinding" contract="RestService.IRestServiceImpl" behaviorConfiguration="web">

        </endpoint>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name ="ServiceBehavior">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="web">
          <webHttp/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

更新: 运行跟踪,这是抛出异常的堆栈跟踪:

System.ServiceModel.Dispatcher.HttpUnhandledOperationInvoker.Invoke(对象实例,对象[]输入,对象[]&输出) 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(布尔 isOperationContextSet) System.ServiceModel.Dispatcher.ChannelHandler.DispatchAndReleasePump(RequestContext request, Boolean cleanThread, OperationContext currentOperationContext) System.ServiceModel.Dispatcher.ChannelHandler.HandleRequest(RequestContext 请求,OperationContext currentOperationContext) System.ServiceModel.Dispatcher.ChannelHandler.AsyncMessagePump(IAsyncResult 结果) System.ServiceModel.Dispatcher.ChannelHandler.OnAsyncReceiveComplete(IAsyncResult 结果) System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(IAsyncResult 结果) System.Runtime.AsyncResult.Complete(布尔同步完成) System.Runtime.InputQueue1.AsyncQueueReader.Set(Item item) System.Runtime.InputQueue1.EnqueueAndDispatch(Ite​​m item, Boolean canDispatchOnThisThread) System.Runtime.InputQueue1.EnqueueAndDispatch(T item, Action dequeuedCallback, Boolean canDispatchOnThisThread) System.ServiceModel.Channels.SingletonChannelAcceptor3.Enqueue(QueueItemType item, Action dequeuedCallback, Boolean canDispatchOnThisThread) System.ServiceModel.Channels.HttpChannelListener.HttpContextReceived(HttpRequestContext上下文,动作回调) System.ServiceModel.Activation.HostedHttpTransportManager.HttpContextReceived(HostedHttpRequestAsyncResult 结果) System.ServiceModel.Activation.HostedHttpRequestAsyncResult.HandleRequest() System.ServiceModel.Activation.HostedHttpRequestAsyncResult.BeginRequest() System.ServiceModel.Activation.HostedHttpRequestAsyncResult.OnBeginRequest(对象状态) System.Runtime.IOThreadScheduler.ScheduledOverlapped.IOCallback(UInt32 errorCode,UInt32 numBytes,NativeOverlapped* nativeOverlapped) System.Runtime.Fx.IOCompletionThunk.UnhandledExceptionFrame(UInt32 错误,UInt32 bytesRead,NativeOverlapped* nativeOverlapped) System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)

【问题讨论】:

  • Endpoint not found 与您未提供的 WCF 配置有关。
  • 已更新。如果我显得含糊不清,请提前道歉。这只是因为我不确定如何提出问题
  • 我没有使用过 wcf rest,所以我帮不上什么忙,但您可能还应该发布您的 c# 方法定义和您尝试加载的 URL。
  • 未找到错误并不总是意味着未找到。如果在服务通道的正确位置发生异常,您可以获得“未找到”异常。尝试打开 WCF 跟踪。它真的很冗长,所以我不建议保留它,但它会给你很多细节。 msdn.microsoft.com/en-us/library/ms733025.aspx
  • 跟踪中发现了一个异常。但是,它并没有说明它到底是什么,只是 System.InvalidOperationException,mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089。仅当服务使用该库时才会发生此错误。我在其他应用程序中没有问题。

标签: .net wcf


【解决方案1】:

好的,所以我让它工作了。似乎是主机地址的问题。我将项目重新创建为服务库而不是服务应用程序,我注意到默认配置中有几个新字段。其中之一是给主人的。当我设置基址时,一切都开始工作了。这是配置:

<system.serviceModel>
<services>
  <service name="ServiceWithLibraryTest.UtiService">
    <endpoint address="" binding="webHttpBinding" contract="ServiceWithLibraryTest.IUtiService" behaviorConfiguration="web" />        
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8732/ServiceWithLibraryTest/UtiService/"/>
      </baseAddresses>
    </host>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="ServiceBehavior">
      <serviceMetadata httpGetEnabled="True"/>
      <serviceDebug includeExceptionDetailInFaults="False"/>
    </behavior>
  </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="web">
      <webHttp/>
    </behavior>
  </endpointBehaviors>
</behaviors>

我对 WCF 有点陌生,据我了解,配置经常令人头疼是臭名昭著的。我仍在努力研究端点,但我开始更好地理解端点如何只是暴露服务和行为的手段,即它们是如何通信的。然后,当然,休息服务为其添加了一个全新的层。我很欣赏这些想法:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多