1

Web 参照を介して Web メソッドを呼び出そうとすると断続的に例外をスローするASP.NET (VB.NET) Web アプリケーション ( .NET 4 Framework をターゲット) があります。Web 参照は、ファイル拡張子が.asmxの古い学校のASP.NET Web サービスです。

メインの Web アプリケーションと Web サービスは、どちらもIIS 7.5/Windows 2008 SP1上にあります。IIS では、両方のアプリが同じ Web サイトにありますが、異なるアプリケーション プールにあります。

例外には、「既存の接続がリモート ホストによって強制的に閉じられました」と記載されています。Web メソッドが呼び出された最初の数回は例外がスローされないため、このエラーは奇妙です。ただし、エラーがスローされると、後続のすべてのインスタンスで引き続きスローされます。IIS でアプリ プールを再起動すると、エラーが修正されます。

送信されるデータは最小限なので、データのサイズには関係ないと思います。

最近、リバース プロキシとして機能する F5 デバイスをインストールしました。Web サービスは現在、このデバイスの背後で実行されています。これは、アプリケーションをDMZ (非武装地帯)に移動するために行いました。これがこの問題の原因である可能性がありますが、そうである場合、適切に構成する方法がわかりません。

これが私のコードです:

_webService = New BWebService.BWebService()
_webService.Url = EnvironmentSettingsLocator.Settings.BWebServiceWsdl
If Not _webService.IsExistingUser(userId) Then 
' Do Something
end if

例外は次のとおりです。

基になる接続が閉じられました: 受信時に予期しないエラーが発生しました。

    at System.Web.Services.Protocols.WebClientProtocol.GetWebResponse(WebRequest request)
   at System.Web.Services.Protocols.HttpWebClientProtocol.GetWebResponse(WebRequest request)
   at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
   at Apex3Web.BIRVWebService.BIRVWebService.IsExistingUser(Int32 userCode) in C:\Users\Ryan.DeFour.ctr\Documents\Work\TFS Source Code 2010\APEX4CMMI\APEXDevelopment\Apex3Web\Apex3Web\Web References\BIRVWebService\Reference.vb:line 501
   at Apex3Web.ManageExaminee.GridViewExaminees_RowDataBound(Object sender, GridViewRowEventArgs e) in C:\Users\Ryan.DeFour.ctr\Documents\Work\TFS Source Code 2010\APEX4CMMI\APEXDevelopment\Apex3Web\Apex3Web\Forms\Examiner\ManageExaminee.aspx.vb:line 651
   at System.Web.UI.WebControls.GridView.OnRowDataBound(GridViewRowEventArgs e)
   at System.Web.UI.WebControls.GridView.CreateRow(Int32 rowIndex, Int32 dataSourceIndex, DataControlRowType rowType, DataControlRowState rowState, Boolean dataBind, Object dataItem, DataControlField[] fields, TableRowCollection rows, PagedDataSource pagedDataSource)
   at System.Web.UI.WebControls.GridView.CreateChildControls(IEnumerable dataSource, Boolean dataBinding)
   at System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable data)
   at System.Web.UI.WebControls.GridView.PerformDataBinding(IEnumerable data)
   at System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable data)
   at System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback)
   at System.Web.UI.WebControls.DataBoundControl.PerformSelect()
   at System.Web.UI.WebControls.BaseDataBoundControl.DataBind()
   at System.Web.UI.WebControls.GridView.DataBind()
   at Apex3Web.ManageExaminee.FindCommand_Click(Object sender, EventArgs e) in C:\Users\Ryan.DeFour.ctr\Documents\Work\TFS Source Code 2010\APEX4CMMI\APEXDevelopment\Apex3Web\Apex3Web\Forms\Examiner\ManageExaminee.aspx.vb:line 539
   at System.Web.UI.WebControls.Button.OnClick(EventArgs e)
   at System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)
   at System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
   at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
   at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

トランスポート接続からデータを読み取れません: 既存の接続がリモート ホストによって強制的に閉じられました。

    at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
   at System.Net.FixedSizeReader.ReadPacket(Byte[] buffer, Int32 offset, Int32 count)
   at System.Net.Security._SslStream.StartFrameHeader(Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest)
   at System.Net.Security._SslStream.StartReading(Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest)
   at System.Net.Security._SslStream.ProcessRead(Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest)
   at System.Net.TlsStream.Read(Byte[] buffer, Int32 offset, Int32 size)
   at System.Net.PooledStream.Read(Byte[] buffer, Int32 offset, Int32 size)
   at System.Net.Connection.SyncRead(HttpWebRequest request, Boolean userRetrievedStream, Boolean probeRead)

既存の接続がリモート ホストによって強制的に閉じられました

at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
   at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
4

1 に答える 1

0

問題の原因は、 SSL ロード バランシング機能を備えた、新しくインストールされたF5 BigIPリバース プロキシ デバイスでした。アプリケーションは、SOAP ベースのサービス (WCF と ASMX の両方) への呼び出し中に例外をスローしました。F5 の担当者と話しているときに、デバイスを適切に構成して、負荷分散機能を使用する代わりに、要求がデバイスを単純に通過するようにすることができました。これはおそらく最も洗練された解決策ではありませんでしたが、時間の都合上、これを実現するために私たちがしなければならなかったことです。

于 2014-08-13T15:19:59.727 に答える