2016-06-26 464 views
0

私のソリューションのService Referencesフォルダに.asmxというURLを参照して外部Webサービスを使用しているWPF/WCFアプリケーションがあります。サーバー側でWCFサービスでエラーが発生しました "エンドポイントがリッスンしていませんでした..."

、私は以下のようにweb.configのエントリを作成しました:

<binding name="ExtractService" 
    closeTimeout="00:01:00" openTimeout="00:01:00" 
    receiveTimeout="00:01:00" sendTimeout="00:10:00" 
    allowCookies="false" bypassProxyOnLocal="false" 
    hostNameComparisonMode="StrongWildcard" 
    maxBufferSize="2147483647" maxBufferPoolSize="524288" 
    maxReceivedMessageSize="2147483647" 
    messageEncoding="Text" textEncoding="utf-8" 
    transferMode="Buffered" useDefaultWebProxy="true"> 
    <readerQuotas maxDepth="32" maxStringContentLength="8192" 
      maxArrayLength="2147483647" maxBytesPerRead="4096" 
      maxNameTableCharCount="2147483647" /> 
    <security mode="Transport"> 
     <transport clientCredentialType="None" proxyCredentialType="None" realm="" /> 
     <message clientCredentialType="UserName" algorithmSuite="Default" /> 
    </security> 
</binding> 
<client> 
    <endpoint name="ExtractService" 
     address="https://example.com/DataExtractService.asmx" 
     binding="basicHttpBinding" bindingConfiguration="ExtractService" 
     contract="ExtractService" /> 
</client> 

をまた、私は上記のweb.configと同じクライアント側でapp.configエントリを持っています。

開発環境ですべて実行するとうまく動作します。たぶん私のクライアントとWebサーバー(WCF)が同じマシン上にあるためです。

しかし、テストサーバーにアプリケーションをデプロイすると、以下のエラーが発生します。この場合、クライアントは私のマシン上にあり、サーバー(WCF)は他のマシン上にあります。

メッセージ:HandlingInstanceID:71a85aef-dbb0-4c28-9035-57f8b7526ee0 型 'System.ServiceModel.EndpointNotFoundException' の例外
が発生したと捉えました。

メッセージを受け入れることができるhttps://example.com/DataExtractService.asmxにリッスンしているエンドポイントがありませんでした。これは、しばしば不正なアドレスまたはSOAPアクションによって引き起こされます。詳細については、InnerException(存在する場合)を参照してください。

これを解決するために、クライアント側のapp.exe.configファイルに同じ設定をコピーしようとしましたが、動作しません。

ここで、クライアントの設定がありません。私はまた、サーバーのbinフォルダにapp.configをコピーしましたが、助けにはなりませんでした。

答えて

1
  • サーバ側サービスは、このサーバ上のどのエンドポイントに利用可能であるかを定義セクション<services>を含むべきである(少なくとも一つエンドポイントを定義少なくとも一つ<service>サブセクション、が存在しなければなりませんこのサービスを利用できる場所は複数あります)。

  • クライアントには、利用可能なエンドポイントの1つに接続するセクション<client>が含まれている必要があります。

または簡易で:あなたはサーバー側設定にセクション<services>を持っていない場合は、は、このように、このエラーにつながるので、接続するための任意のエンドポイントを公開していないています。

だからあなたサーバー側設定は次のようになりべき:

また
<!-- Behavior is optional - maybe you need to define something, maybe not --> 
<behaviors> 
    <serviceBehaviors> 
     <behavior name="ExtractServiceBehavior"> 
      ..... 
     </behavior> 
    </serviceBehaviors> 
</behaviors> 
<!-- Binding is the same as defined on the client --> 
<binding name="ExtractService" .... 
    ...... 
</binding> 
<!-- Define all your services that you offer --> 
<services> 
    <service name="ExtractService" 
      behaviorConfiguration="ExtractServiceBehavior"> 
     <endpoint name="ExtractService" 
      address="https://example.com/DataExtractService.asmx" 
      binding="basicHttpBinding" 
      bindingConfiguration="ExtractService" 
      contract="IExtractService" /> 
    </service>  
</services>  

: - ない実装具象クラス一般的に、あなたの契約インターフェースIExtractService)でなければなりませんそのインタフェース。

+0

ありがとうございます。私は一致する契約などでサーバータグを定義しましたが、それでも同じエラーが発生します。私はまた、開発環境でどのように動作するのだろうか? –

+0

既定のエンドポイント(WCF 4.0+)では「サーバー側の設定にセクションがない場合は、接続するエンドポイントが公開されていません」というエラーが表示されますか? – Tim

+1

@Tim:あなたはおそらく正しいです.....私はそれらを忘れています。私は明らかに私のエンドポイントを明示的に定義するよりも、もっと混乱し、 "予期せず驚く"と感じています..... –

関連する問題