2

WCF サービスを使用する Windows フォーム アプリがあります。アプリケーションは、WCF サービスの 1 つを使用して、クライアントを実行している特定のユーザーにメッセージを送信します。そのため、メッセージがユーザーに送信されるたびに、コールバック「http:」文字列が動的に構築されます。これには、現在のユーザーがログオンしているサーバーの IP アドレスとポート (126.221.97.105:701)、ユーザーの ID (56281)、およびクライアント GUID (7392d27a-e4a0-42e2-89a3-adc332e28934) が含まれます。したがって、典型的なコールバック「http:」文字列は次のようになります。

http://xxx.xxx.xx.xxx:701/CmesCns/CALLBACK/56281/7392d27a-e4a0-42e2-89a3-adc332e28934

クライアントには http 名前空間 (http://+:701/) があり、グループ「Everyone」はこの名前空間に関連付けられており、すべてのアクセス許可 (GenericAll、GenericExecute、GenericRead、および GenericWrite) がチェックされています。「http 名前空間」を使用して名前空間を作成します。

私たちのアプリケーションは、数年間 (Windows Server 2003 上で) 運用されており、すべて正常に動作しています。

最近、アプリケーションを Windows 2008 サーバー環境で実行できるように変換しました。各プロジェクトの「ターゲット フレームワーク」は「.NET Framework 4.0」に設定されています。私たちのアプリケーションは、私の Windows 7 開発者ワークステーションで問題なく動作します。つまり、WCF サービスからメッセージを受信できますが、アプリケーションを Windows 2008 サーバーに配置してアプリケーションを実行しようとすると、次のエラー メッセージが表示されます。

「メッセージを受け入れることができるhttp://xxx.xxx.xx.xxx:701/CmesCns/CALLBACK/56281/7392d27a-e4a0-42e2-89a3-adc332e28934でリッスンしているエンドポイントがありませんでし た。これは多くの場合、アドレスが正しくないことが原因です。または SOAP アクション。詳細については、存在する場合は InnerException を参照してください。」</p>

http 名前空間 (http://+:701/) は、開発者ワークステーションと Windows 2008 サーバーに存在します。グループ「Everyone」は、Windows 7 ボックスと Windows 2008 サーバーの名前空間に関連付けられており、すべてのアクセス許可 (GenericAll、GenericExecute、GenericRead、および GenericWrite) がチェックされます。

答えを求めて Web を検索しましたが、何も見つかりませんでした。これが Windows 7 ワークステーションでは機能するのに、Windows 2008 サーバーでは機能しない理由について、何か考えがある人はいますか?

どんな助けでも大歓迎です!ケビン

4

2 に答える 2

1

通常、このエラーは、クライアントが要求しているものと一致するエンドポイントがサーバー上にないために発生します (アドレス、サービス、または認証が異なります)。ただし、私の場合、まったく同じエラーが発生しましたが、これらのいずれかが原因ではありませんでした。

IIS でトレースを有効にし、SvcTraceViewer.exe (Visual Studio に含まれています) で svclog トレースを確認したところ、実際の内部エラーは"Maximum request length exceeded." でした。

私のクライアントは、サービスを介して画像をアップロードしていました。そして、画像が大きすぎたと思います。

トレースを有効にするために、これを構成セクションに追加しました。

<system.diagnostics>
  <sources>
        <source name="System.ServiceModel" 
                switchValue="All"
                propagateActivity="true">
        <listeners>
           <add name="traceListener" 
               type="System.Diagnostics.XmlWriterTraceListener" 
               initializeData= "c:\log\Traces.svclog" />
        </listeners>
     </source>
  </sources>

エラーを解決するために、Web 構成でメッセージ要求の長さを増やしたところ、エラーはなくなりました。

これを行うには、web.config の system.websection に次の行を追加しました。

<httpRuntime maxRequestLength="32768" />

次に、構成セクション内にこのセクションを追加しました

<system.webServer>
 <security>
  <requestFiltering>
   <requestLimits maxAllowedContentLength="32000000" />
  </requestFiltering>
 </security>
</system.webServer>

そのため、トレースを有効にしてから、トレースで正確なエラーを確認することをお勧めします。

于 2014-04-04T17:17:07.760 に答える
1

IIS で WCF サービスをホストする場合、アドレスに絶対 URL を指定しません。.svc ファイルへの相対 URL を使用する必要があります。ベース URL は、それがホストされている Web サイトによって決まります。

    <service name="WebService.Receptor">
<endpoint
    address="/WS.svc"
    binding="wsHttpBinding"
    contract="IMyContract"
 />

クライアントでは、IIS の構成方法に応じて、明らかに完全なアドレスを指定する必要があります。

<client>
<endpoint 
    name="Receptor"
    address="http://MyServer:8000/WS.svc"
    binding="wsHttpBinding"
    contract="IMyContract"
/>

これは、IIS で 8000 ポートをリッスンするサイトを構成し、このサイト内で WCF アプリケーションをホストしていることを前提としています。

役に立たない場合は、これらのリンクをたどってください。お役に立てば幸いです。

スタック オーバーフロー リンク

複数のエンドポイント

于 2012-10-18T05:31:35.083 に答える