5

外部のWebサービスに接続するASP.NetWebサイトがあり、数日前に突然機能しなくなりました。

基本的なコードは次のとおりです。

Try
    request = New ExternalWebService.ProcessRequestService

    ' Error occurs here:
    response = request.processCommand(parameters)

    ' Do some other stuff with response here

Catch webEx As System.Net.WebException

    ' This triggers and generic error gets displayed

Catch ex As Exception

Finally

End Try

は例外でSystem.Net.WebExceptionトリガーされ、次のSendFailureスタックトレースを返します。

基になる接続が閉じられました:送信時に予期しないエラーが発生しました。-
    System.Web.Services.Protocols.WebClientProtocol.GetWebResponse(WebRequestリクエスト)で
    System.Web.Services.Protocols.HttpWebClientProtocol.GetWebResponse(WebRequestリクエスト)で
    System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName、Object [] parameters)で
    ExternalWebService.ProcessRequestService.processCommand(parameters)で

開発マシンでこの問題をデバッグしようとすると、正常に動作し、例外は発生しません。

Webサーバーの最近の更新はなく、FireFoxを使用してWebサーバーからwsdlサービスに接続できます(ただし、IEには接続できませんが、Webサーバー上のIEに関する別の問題に関連している可能性があります)

ここでエラーメッセージ#2に投稿されたすべての解決策を試しましたが、設定KeepAlive = Falseとを含みますServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3が、問題を解決するために機能したものはありません。

WebサーバーはWindowsServer2003とIIS6.0を実行しています

このエラーが1つのマシンで発生するが、別のマシンでは発生しない原因は何ですか?

編集:トレース情報は次のとおりです。

System.Web.Services.Asmx情報:0:XmlSerializerの呼び出し[XmlSerializerの作成]
    メソッド:System.Xml.Serialization.XmlSerializer#1669721556 :: FromMappings(System.Xml.Serialization.XmlMapping []#4002219 = [4]、ExternalWebService.ProcessRequestService#93032588 = ExternalWebService.ProcessRequestService)
    呼び出し元:System.Web.Services.Protocols.SoapClientType#42808772 ::。ctor(ExternalWebService.ProcessRequestService#93032588 = ExternalWebService.ProcessRequestService)
    ProcessId = 2796
    LogicalOperationStack =
    ThreadId = 14
    DateTime = 2012-12-21T17:02:39.2826250Z
    タイムスタンプ=61755143048799345
System.Web.Services.Asmx情報:0:XmlSerializerから戻る[XmlSerializerを作成]
    呼び出し元:System.Web.Services.Protocols.SoapClientType#42808772 ::。ctor(ExternalWebService.ProcessRequestService#93032588 = ExternalWebService.ProcessRequestService)
    ProcessId = 2796
    LogicalOperationStack =
    ThreadId = 14
    DateTime = 2012-12-21T17:02:39.6576250Z
    タイムスタンプ=61755144323396760
System.Web.Services.Asmx情報:0:XmlSerializerの呼び出し[書き込み要求]
    メソッド:Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer#1231684 :: Serialize(System.Xml.XmlTextWriter#8023888 = ..、System.Object []#19695157 = [40]、(null)、(null))
    呼び出し元:ExternalWebService.ProcessRequestService#60553900 :: Serialize()
    ProcessId = 2796
    LogicalOperationStack =
    ThreadId = 14
    DateTime = 2012-12-21T17:02:39.7357500Z
    タイムスタンプ=61755144598320131
System.Web.Services.Asmx情報:0:XmlSerializerからの戻り[書き込み要求]
    呼び出し元:ExternalWebService.ProcessRequestService#60553900 :: Serialize()
    ProcessId = 2796
    LogicalOperationStack =
    ThreadId = 14
    DateTime = 2012-12-21T17:02:39.7357500Z
    タイムスタンプ=61755144621621529
System.Web.Services.Asmx情報:0:WebRequest.GetResponseを呼び出しています
    メソッド:System.Net.HttpWebRequest#2800407 :: GetResponse()
    呼び出し元:ExternalWebService.ProcessRequestService#60553900 :: GetWebResponse()
    ProcessId = 2796
    LogicalOperationStack =
    ThreadId = 14
    DateTime = 2012-12-21T17:02:39.7357500Z
    タイムスタンプ=61755144622114240
4

2 に答える 2

3

どうやら私の特定のケースでは、Web サービス ベンダーがセキュリティを強化したためであり、Web サーバーには接続を解読するために必要な正しいライブラリがありませんでした。

唯一の手がかりは、ID が 36874 の単一のシステム イベント ビューア エントリと、サイトが機能しなくなった数日前の Schannel のソースでした。

リモート クライアント アプリケーションから SSL 接続要求を受信しましたが、クライアント アプリケーションでサポートされている暗号スイートがサーバーでサポートされていません。SSL 接続要求が失敗しました。

ただし、この問題を自分でデバッグしている場合、このリンクは非常に役立ちました。エラーの簡単な説明があり、正しい方向を示してくれました。私の問題は Web サービスに接続できないことに関連していたからです。

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

この問題は、クライアント コンピューターが HTTP 要求を送信できない場合に発生します。接続が閉じられているか使用できないため、クライアント コンピューターは HTTP 要求を送信できません。この記事http://support.microsoft.com/kb/915599でエラーを検索します。

また、リンクされた Microsoft サポート ページには、この問題の最も一般的な原因を解決するために試すことができるいくつかの異なる解決策についてもかなり詳しく記載されていました。

于 2012-12-22T16:10:51.890 に答える
2

ただのアイデアです。それが良いものかどうかはわかりません。数か月前にサーバーの1つで同じことが起こったのは、誰か(セキュリティチーム?:/)が "%SYSTEMROOT%\Temp"フォルダへの書き込み権限を変更したためです。 。そのアクション以降、XMLSerializerは、シリアル化/逆シリアル化に使用される一時アセンブリを生成できませんでした。

http://www.hanselman.com/blog/ChangingWhereXmlSerializerOutputsTemporaryAssemblies.aspxから :

ASP.NETからXmlSerializerを使用する場合、%SYSTEMROOT%\ Tempフォルダーでユーザーアカウントに読み取り/書き込みアクセス許可を付与することで、アクセス許可の問題を解決できます。

したがって、アプリケーションプールで使用されているアカウントに、「%SYSTEMROOT%\Temp」フォルダーへの書き込み権限があることを確認できます...

幸運を...

于 2012-12-21T17:51:10.993 に答える