0

クラスライブラリへの参照を使用するWCFサービスがあります。そのライブラリのクラスは、データベースとの対話などを行います。ブラウザを介したRESTful呼び出しを使用してサービス(エラーなしでコンパイル)をテストしていましたが、「エンドポイントが見つかりません」というページが表示されるだけです。これは、ライブラリに接続文字列やアプリ設定などへの参照があるという事実に関連していると思います(通常、このライブラリを使用するアプリケーションに含める必要があります)。したがって、私が見つけるのに苦労しているのは、このライブラリで動作するようにwcfサービスを適切に構成する方法です。接続文字列とアプリセットをwcfweb.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(Object instance、Object [] input、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。 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)System.ServiceModel.Dispatcher.ChannelHandler.DispatchAndReleasePump(RequestContext request、Boolean cleanThread、OperationContext currentOperation System.ServiceModel.Dispatcher.ChannelHandler.HandleRequest(RequestContext request、OperationContext currentOperationContext)System.ServiceModel.Dispatcher.ChannelHandler.AsyncMessagePump(IAsyncResult result)System.ServiceModel.Dispatcher.ChannelHandler.OnAsyncReceiveComplete(IAsyncResult result)System.Runtime.Fx.AsyncThunk。 UnhandledExceptionFrame(IAsyncResult result)System.Runtime.AsyncResult.Complete(Boolean completeSynchronously)System.Runtime.InputQueueServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc&rpc)System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)System.ServiceModel.Dispatcher.ChannelHandler.DispatchAndReleasePump(RequestContext request、Boolean cleanThread、OperationContext currentOperationContext)System.ServiceModel.Dispatcher.ChannelHandler .HandleRequest(RequestContext request、OperationContext currentOperationContext)System.ServiceModel.Dispatcher.ChannelHandler.AsyncMessagePump(IAsyncResult result)System.ServiceModel.Dispatcher.ChannelHandler.OnAsyncReceiveComplete(IAsyncResult result)System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result)System。 Runtime.AsyncResult.Complete(Boolean completeSynchronously)System.Runtime.InputQueueServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc&rpc)System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)System.ServiceModel.Dispatcher.ChannelHandler.DispatchAndReleasePump(RequestContext request、Boolean cleanThread、OperationContext currentOperationContext)System.ServiceModel.Dispatcher.ChannelHandler .HandleRequest(RequestContext request、OperationContext currentOperationContext)System.ServiceModel.Dispatcher.ChannelHandler.AsyncMessagePump(IAsyncResult result)System.ServiceModel.Dispatcher.ChannelHandler.OnAsyncReceiveComplete(IAsyncResult result)System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result)System。 Runtime.AsyncResult.Complete(Boolean completeSynchronously)System.Runtime.InputQueuerpc)System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)System.ServiceModel.Dispatcher.ChannelHandler.DispatchAndReleasePump(RequestContext request、Boolean cleanThread、OperationContext currentOperationContext)System.ServiceModel.Dispatcher.ChannelHandler.HandleRequest(RequestContext request、OperationContext currentOperationContext) System.ServiceModel.Dispatcher.ChannelHandler.AsyncMessagePump(IAsyncResult result)System.ServiceModel.Dispatcher.ChannelHandler.OnAsyncReceiveComplete(IAsyncResult result)System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result)System.Runtime.AsyncResult.Complete(Boolean completeSynchronously) System.Runtime.InputQueuerpc)System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)System.ServiceModel.Dispatcher.ChannelHandler.DispatchAndReleasePump(RequestContext request、Boolean cleanThread、OperationContext currentOperationContext)System.ServiceModel.Dispatcher.ChannelHandler.HandleRequest(RequestContext request、OperationContext currentOperationContext) System.ServiceModel.Dispatcher.ChannelHandler.AsyncMessagePump(IAsyncResult result)System.ServiceModel.Dispatcher.ChannelHandler.OnAsyncReceiveComplete(IAsyncResult result)System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result)System.Runtime.AsyncResult.Complete(Boolean completeSynchronously) System.Runtime.InputQueueDispatchAndReleasePump(RequestContext request、Boolean cleanThread、OperationContext currentOperationContext)System.ServiceModel.Dispatcher.ChannelHandler.HandleRequest(RequestContext request、OperationContext currentOperationContext)System.ServiceModel.Dispatcher.ChannelHandler.AsyncMessagePump(IAsyncResult result)System.ServiceModel.Dispatcher.ChannelHandler.OnAsyncReceiveComplete( IAsyncResult result)System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result)System.Runtime.AsyncResult.Complete(Boolean completeSynchronously)System.Runtime.InputQueueDispatchAndReleasePump(RequestContext request、Boolean cleanThread、OperationContext currentOperationContext)System.ServiceModel.Dispatcher.ChannelHandler.HandleRequest(RequestContext request、OperationContext currentOperationContext)System.ServiceModel.Dispatcher.ChannelHandler.AsyncMessagePump(IAsyncResult result)System.ServiceModel.Dispatcher.ChannelHandler.OnAsyncReceiveComplete( IAsyncResult result)System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result)System.Runtime.AsyncResult.Complete(Boolean completeSynchronously)System.Runtime.InputQueueAsyncMessagePump(IAsyncResult result)System.ServiceModel.Dispatcher.ChannelHandler.OnAsyncReceiveComplete(IAsyncResult result)System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result)System.Runtime.AsyncResult.Complete(Boolean completeSynchronously)System.Runtime.InputQueueAsyncMessagePump(IAsyncResult result)System.ServiceModel.Dispatcher.ChannelHandler.OnAsyncReceiveComplete(IAsyncResult result)System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result)System.Runtime.AsyncResult.Complete(Boolean completeSynchronously)System.Runtime.InputQueue1.AsyncQueueReader.Set(Item item) System.Runtime.InputQueue1.EnqueueAndDispatch(Item 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 context、Action callback)System.ServiceModel.Activation.HostedHttpTransportManager.HttpContextReceived(HostedHttpRequestAsyncResult result)System.ServiceModel.Activation.HostedHttpRequestAsyncResult。 HandleRequest()System.ServiceModel.Activation.HostedHttpRequestAsyncResult.BeginRequest()System.ServiceModel.Activation.HostedHttpRequestAsyncResult.OnBeginRequest(Object state)System.Runtime.IOThreadScheduler.ScheduledOverlapped.IOCallback(UInt32 errorCode、UInt32 numBytes、NativeOverlapped * nativeOverlapped) .Fx.IOCompletionThunk.UnhandledExceptionFrame(UInt32エラー、UInt32 bytesRead、NativeOverlapped * nativeOverlapped)System.Threading._IOCompletionCallback。PerformIOCompletionCallback(UInt32 errorCode、UInt32 numBytes、NativeOverlapped * pOVERLAP)

4

1 に答える 1

0

わかりました、それで私はそれを動かしました。ホストアドレスに問題があるようです。プロジェクトをサービスアプリケーションではなくサービスライブラリとして再作成しましたが、デフォルトの構成にいくつかの新しいフィールドがあることに気付きました。そのうちの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に少し慣れていないので、私が理解していることから、構成が常にヘッドスクラッチャーであることは有名です。私はまだエンドポイントに頭を悩ませているところですが、エンドポイントがサービスを公開する手段にすぎず、動作が通信方法であるということをよりよく理解し始めています。そしてもちろん、RESTサービスはそれにまったく新しいレイヤーを追加します。私は考えに感謝します:)

于 2012-09-04T15:43:32.157 に答える