0

ドメイン内でデュアル チャネル サービスを実行しています。ポート 20120 に TCP バインディングがあり、ポート 20121 に HTTP バインディングがあります。

DMZ (Web) では、この WCF サービスにアクセスしたいと考えています。ファイアウォールは Web からサービスに対して開いているようです。telnet を使用すると、両方のポートにアクセスでき、Web のブラウザーから WSDL を参照することもできます。現在、Web アプリケーションからサービスに接続しようとすると (TcpBinding を使用しており、面倒なプロセスである新しいバイナリを再デプロイしないと簡単に HttpBinding に変更できません)、例外が発生します。

System.ServiceModel.CommunicationException, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '00:00:59.9680000'.

System.ServiceModel.Channels.StreamConnection.Read(Byte[] buffer, Int32 offset, Int32 size, TimeSpan timeout)
System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.SendPreamble(IConnection connection, ArraySegment`1 preamble, TimeoutHelper& timeoutHelper)
System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.DuplexConnectionPoolHelper.AcceptPooledConnection(IConnection connection, TimeoutHelper& timeoutHelper)
System.ServiceModel.Channels.ConnectionPoolHelper.EstablishConnection(TimeSpan timeout)
System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.OnOpen(TimeSpan timeout)
System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
System.ServiceModel.Channels.ServiceChannel.OnOpen(TimeSpan timeout)
System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeType typeOwner)
System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
System.ServiceModel.Channels.ServiceChannelProxy.ExecuteMessage(Object target, IMethodCallMessage methodCall)
System.ServiceModel.Channels.ServiceChannelProxy.InvokeChannel(IMethodCallMessage methodCall)
System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
System.ServiceModel.ICommunicationObject.Open(TimeSpan timeout)
System.ServiceModel.ClientBase`1.System.ServiceModel.ICommunicationObject.Open(TimeSpan timeout) ...

私たちのテスト環境はすべてイントラネットだったので、DMZ はありませんでした。そこではすべて正常に動作します。

サービス自体はドメイン ユーザーとして実行されており、クライアント サービスの動作には userPrincipal が構成されています (username@domain.ext など)。domain.exe のドメイン コントローラにアクセスする必要がありますか?

サービス側で WCF ログも有効にしましたが、そこでは何も起こりません。そこでは何も起こらなかったように、すべてが静かです。接続が切断された理由を確認するために見逃した他の場所はありますか。

EDIT1: wcf 接続を確立し、2 つのメソッドを呼び出す小さなテスト プログラムを作成しました。これは、サービスと同じマシンから、および dmz Web からも正常に機能します。バインド設定は同じです。(それを確認した)。dmz Web マシンの通常のコンソールからローカル ユーザーとしてテストを実行します。ヒントはありますか?

4

1 に答える 1

0

セキュリティ モードをなしに変更したので<security mode="None"/>、Web にアクセスできるようになりました。問題は、テスト プログラムを実行するときにローカル ユーザーを使用したにもかかわらず、ドメインから dmz にアクセスするために使用した vpn/rdp セッションがセキュリティの穴を埋め、wcf サービスに接続できたことだと思います。 . ウェブサイドにはその穴がなかったので、失敗しました。

于 2011-10-04T16:11:14.503 に答える