2011-08-18 48 views
2

自分のサーバーで呼び出すことができましたが動作しますが、IISでwcfサービスをホストすると問題が発生します。このエラーの詳細は次のとおりです。WCF呼び出しサービスが失敗する

サービスの呼び出しに失敗しました。考えられる原因:サービスがオフラインになっています またはアクセス不能です。クライアント側の構成が プロキシと一致しません。既存のプロキシは無効です。詳細は のスタックトレースを参照してください。新しいプロキシを開始し、 をデフォルト設定に復元するか、サービスを更新することで、回復を試みることができます。

スタック・トレース・エラーの詳細

サーバーは、内部エラーのため要求を処理できませんでした。エラーの詳細については 、クライアントに戻す例外情報を送信する ために、サーバ上の IncludeExceptionDetailInFaults(ServiceBehaviorAttribute からか<serviceDebug>設定行動からのいずれか)をオンにする、またはMicrosoftごとに トレースをオンにどちらか.NET Framework 3.0 SDKのドキュメントおよび は、サーバートレースログを検査します。

サーバースタックトレース:System.ServiceModel.Channels.ServiceChannel.HandleReplyでSystem.ServiceModel.Channels.ServiceChannel.ThrowIfFaultUnderstoodで
(メッセージ 返信、MessageFault障害、文字列アクション、MessageVersionバージョン、 FaultConverter faultConverter)
(ProxyOperationRuntime 操作、ProxyRpc & RPC)System.ServiceModel.Channels.ServiceChannel.Callで
(文字列アクション、 ブール一方向、ProxyOperationRuntime動作、オブジェクト[]イン、 オブジェクト[]アウト、のTimeSpanタイムアウト)
で:System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessageが メッセージ)[0]に再スロー

例外でSystem.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCallで、ProxyOperationRuntime動作)で
System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessageが reqMsg、IMessageがretMsg)IUserService.GetUser(SにおけるSystem.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(のMessageData & msgData、のInt32型)で

  1. アプリ:

トリングUSERID)UserServiceClient.GetUser(文字列ユーザーIDで
)ここでソースコードです。WCFのウェブサイトのホストからwcfservicelirbrary

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 

<system.web> 
<compilation debug="true" /> 
</system.web> 
    <system.serviceModel> 
    <services> 
     <service name="UserServiceLibrary.UserService"> 
     <endpoint address="" binding="wsHttpBinding"  contract="UserServiceLibrary.IUserService"> 
      <identity> 
      <dns value="localhost" /> 
      </identity> 
     </endpoint> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost:8732/Design_Time_Addresses/UserServiceLibrary/UserService/" /> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior> 
      <serviceMetadata httpGetEnabled="True"/> 
      <serviceDebug includeExceptionDetailInFaults="False" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel>   
</configuration> 
  • のWeb設定ファイルから設定ファイルが

    <?xml version="1.0"?> 
    <configuration> 
    
        <system.web> 
        <compilation debug="false" targetFramework="4.0" /> 
        </system.web> 
        <system.serviceModel> 
        <services> 
         <service name="UserServiceLibrary.UserService"> 
         <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="" 
        contract="IMetadataExchange" /> 
         <endpoint address="basic" binding="basicHttpBinding" bindingConfiguration="" 
        contract="UserServiceLibrary.IUserService" /> 
         <endpoint address="" binding="wsHttpBinding" contract="UserServiceLibrary.IUserService" /> 
         </service> 
        </services> 
        <behaviors> 
        <serviceBehaviors> 
         <behavior> 
    
         <serviceMetadata httpGetEnabled="true"/> 
    
          <serviceDebug includeExceptionDetailInFaults="false"/> 
         </behavior> 
         </serviceBehaviors> 
        </behaviors> 
        <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 
    <system.webServer> 
        <modules runAllManagedModulesForAllRequests="true"/> 
    </system.webServer> 
    </configuration> 
    
    WCFエラーが発生したいつものよう
  • +2

    まず、サーバーに移動して、次の構成更新を適用します。 http://msdn.microsoft.com/en-us/library/system.servicemodel.servicebehaviorattribute .includeexceptiondetailinfaults.aspx – dotnetnate

    +0

    また、 'UserServi ceClient.GetUser(String UserID) ' - 例外が元々発生した場所です。あなたのコードと、より良い回答のためのdotnetnateの提案から得られる追加情報を投稿してください:) – Tim

    +0

    ok私はまず試してみよう... –

    答えて

    1

    、キーは、スタックトレースの一番下にある可能性が最も高いの権利である:

    UserServiceClient.GetUser(String UserID)

    これがエラーの原因でした最初は

    サーバーにアクセスできるかどうかを確認するには、WCFコードをホストするIISサービス(通常はw3wp.exe)にVisual Studioデバッガを接続してみてください。 (これを行うにはDebug | Attach to Process ...を実行する必要があります;管理者権限で実行し、「すべてのユーザーからプロセスを表示」オプションをオンにする必要があります)。

    デバッガをサービスに直接接続することはできませんが、サービスの構成ファイルを調整できる場合は、WCF診断トレースを試してください(MSDN hereに記載されています)。これにより、Service Trace Viewerで表示できるログを作成することができます。これを使用して、非常に多くの情報を簡単に見つけることができます。

    卒業:UserIDは万が一ですか?もしそうなら、あなたはそれが期待されていません、サービス契約は最近変更されましたか?サービスビューアの診断トレースにSystem.Runtime.Serializationを追加すると、詳細情報が表示されます。詳細here

    +0

    サービストレースビューアーによれば、私はこれらのエラーメッセージを受け取りました 1.メッセージの本文は空であるため、読み取ることができません。 2.アクション 'http://schemas.xmlsoap.org/ws/2004/09/transfer/Get'でメッセージを受け入れることのできるチャンネルがありませんでした。 3.ユーザー 'IIS APPPOOL \ ASP.NET v4.0'のログインに失敗しました。 –

    +2

    ああ、最後のものはあなたの問題のように聞こえる。私の推測では、あなたのサーバー上でIISが正しく構成されていないことになります。他のASP.NET 4アプリケーションも動作しますか?その場合、資格情報が正しくないため初期化できないように見えるため、サービスのアプリケーションプールの資格情報を確認してください。 –

    +0

    @ JeremyMcGeeあなたは正しいと思っていました。それはアプリケーションプールの私のユーザーの許可でした。ありがとう:) – Muhammedh

    1

    サービスがホストされているプロセスを実行しているアカウントに、データベースへのアクセス権があることを確認してください。たとえば、IISの場合、サービスがホストされているアプリケーションプールを実行するアカウントには、データベースサーバーへのログインが必要であり、データベースに必要な操作をすべて実行するためのアクセス許可が必要です。 WCFと

    +0

    http://stackoverflow.com/questions/6594001/access-denied-error-for-a-method-in-web-serviceからの回答をコピーしました。 – Muhammedh

    0

    ベストプラクティス、仮想ディレクトリと一緒に確認してくださいWCFプロジェクトのURLを確認し

    1. はエラーなしで現れており、(ハイパーリンクが続くsvcutil)WCFをしたら

    2をプロキシを生成することがありました上のURL、 でクライアントプロジェクトで設定してください。3. TFSのようなソースコントロールにアタッチされている場合は、プロキシを生成するはずです。新しく生成されたものと一緒にチェックインしてくださいファイル(プロジェクト内の隠しファイルを表示)

    1. Reference.csをクリック - >あなたの新しいのDataContractを検証するために酸テストを行うか、データメンバーのフィールドが生成され、サービスを確認し、解決するのは難しいのすべてのそれらの厄介なWCFの参照エラー件まで日

    です再生成することで救済できます。

    関連する問題