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()

我可以从浏览器访问网络服务。我怎样才能找到解决方案?

谢谢,

赢 7 , 框架 4.0

4

2 回答 2

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 回答
1

我想到了。我已将此行添加到 app.config

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