0

asp.net Web サービス (wsdl) を使用した ac# win アプリがあります。プロキシを有効にすると、アプリケーションが動作しなくなり、イベント ログ ビューアーを見ると、次のエラーが表示されます。

Framework Sürümü: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.ServiceModel.ProtocolException
Stack:

Server stack trace: 
at: System.ServiceModel.Channels.HttpChannelUtilities.ValidateRequestReplyResponse(HttpWebRequest request, HttpWebResponse response, HttpChannelFactory factory, WebException responseException, ChannelBinding channelBinding)

at: System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
at: System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
at: System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
at: System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at: System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at: System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
at: System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(System.Runtime.Remoting.Messaging.IMessage, System.Runtime.Remoting.Messaging.IMessage)
at: System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(System.Runtime.Remoting.Proxies.MessageData ByRef, Int32)
at: MatriksMessenger.MsgService.ServiceSoap.IsBlocked(System.String, System.String, System.String)
at: MatriksMessenger.LoginForm.CallService()
at: System.Threading.ThreadHelper.ThreadStart_Context(System.Object)
at: System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
at: System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
at: System.Threading.ThreadHelper.ThreadStart()

ブラウザから Web サービスにアクセスできます。どうすれば解決策を見つけることができますか?

ありがとう、

勝つ 7、フレームワーク 4.0

4

2 に答える 2

1

私はそれを考え出した。この行を app.config に追加しました

      <system.net>
            <defaultProxy enabled="true" useDefaultCredentials="true">
            </defaultProxy>
            <settings>
              <servicePointManager expect100Continue="false" />
            </settings>
      </system.net>
于 2012-09-28T06:09:11.577 に答える
1

Web サービスは、サービスと同じドメインにいるユーザーに依存するセキュリティ/認証設定を使用しているようです。

次に、プロキシ経由でサービスを呼び出すと、通常、セキュリティ (ユーザー) が失われます。これは、プロキシ経由で basicHttpBinding を使用する場合に当てはまります。これがデフォルトであるため、それがあなたがしていることだと思います。

ユーザーとサービスが異なるドメインにある場合でも、Web サービスでユーザーを認証できるようにする場合は、ws2007HttpFederationBinding (WIF) などの別のバインディングを使用する必要があります。

プロキシ設定が邪魔にならないようにする必要がある場合は、サービス呼び出しがプロキシをバイパスしてサービスを直接呼び出すように、Windows アプリケーションの app.config ファイルの設定を変更できます。これは、app.config のバインド仕様に属性を設定することで実行できます。basicHttpBinding で使用できる属性の詳細については、http://msdn.microsoft.com/en-us/library/ms731361.aspx を 参照してください。

変更する必要がある属性は、bypassproxyonlocal と usedefaultproxy です。

于 2012-09-27T12:12:27.253 に答える