LAN上で正常に動作するWCFサービスがありますが、外部からアクセスしようとするとサービス参照が失敗します。
私のWCFサービスは、静的IPドメインなしを使用しているwin2k3ボックスでホストされています。
LAN上で正常に動作するWCFサービスがありますが、外部からアクセスしようとするとサービス参照が失敗します。
私のWCFサービスは、静的IPドメインなしを使用しているwin2k3ボックスでホストされています。
これは私のために働いたものです。設定ファイル内
< serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
< / system.serviceModel >
falseに設定されている場合、私はそのクレイジーなコンピューター名の置換を取得していました。
multipleSiteBindingsEnabled="true"
これが正常に機能するために私がしなければならないことはすべてのようです。
HTTPリクエストからHostヘッダーを再利用する方法を検討していました。私の意見では、これは本番環境と同様に開発でも機能するはずです。
それは次のように簡単であることがわかります:
<behaviors>
<serviceBehaviors>
<behavior name="...">
...
<useRequestHeadersForMetadataAddress />
</behavior>
</serviceBehaviors>
</behaviors>
このように、クライアントがWSDLエンドポイントにアクセスできる場合、これにより、関連付けられているすべてのwsdl/xsdリソースに同じベースURLでアクセスできるようになります。
少し掘り下げた後、これに対する答えを見つけました-これが私が見つけたものです。うまくいけば、他の誰かの時間を節約し、煩わしさを感じることができます。
1.)エンドポイントアドレスにIPを追加し、次のようにベースIPアドレスを使用してホスト名を追加します。
<endpoint
address="http://xx.xx.xx.xx/ServiceApp/Service.svc"
binding="basicHttpBinding" contract="IService">
</endpoint>
<host>
<baseAddresses>
<add baseAddress="http://xx.xx.xx.xx/ServiceApp/" />
</baseAddresses>
</host>
これは私のサービス参照を機能させるのに十分でしたが、ディスコファイルはIPではなくコンピューター名で返され始めました(これは.NET 4.0にアップデートした後だったと思います)。
2.)ドメイン名(www.myDomain.com)がある場合は、これをIISのホストヘッダーに追加します。
3.)IPアドレスとコンピューター名をクライアントのhostsファイルに追加します(ただし、すべてのクライアントにこれをホストファイルに追加させるための簡単な修正が常に可能であるとは限りません)
4.)私が見つけた最善の解決策は、「Timetheos」の投稿に従ってServiceHosts Factory属性を実装することでした:http ://social.msdn.microsoft.com/Forums/en-US/wcf/thread/c7fd51a2-773e-41d4 -95a0-244e925597fe
これは、サービスライブラリをローカルでテスト開発およびデバッグし、サービスアプリを使用してサービスを開発サーバーにデプロイでき、公開後に構成ファイルを変更する必要がなかったため、うまく機能しました。
このプロセス全体は完全な悪夢でした、そして私は誰にもそれを望まないので、あなたが同じ状況にあり、上記の点についてもう情報が必要な場合は連絡してください!
LocalHostの代わりにアスタリスク*(ワイルドカード)を使用するか、次のようにベースURLのマシン名を使用できます。
<add baseAddress="net.tcp://*:4502/WxWcfService_01" />
このようにサービスエンドポイントとhttpgeturlを設定します。
<services>
<service behaviorConfiguration="serviceBehaviour" name="Demo.Service.MultiEndPointsService">
<endpoint address="http://192.168.1.2/Demo.Service/MultiEndPointsService.svc/basic" binding="basicHttpBinding" bindingConfiguration="basicBinding" contract="Demo.Service.MultiEndPointsService" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="serviceBehaviour">
<serviceMetadata httpGetEnabled="true" httpGetUrl="http://192.168.1.2/Demo.Service/MultiEndPointsService.svc/basic"/>
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>