В моем веб-приложении происходит сбой при вызове веб-службы:
Ошибка сервера в приложении '/ zVersion2a'.
Запрос не выполнен с HTTP-статусом 400: неверный запрос.
Вот ссылка на сам веб-сервис (это работает):
http://www.zipeee.com/Zipeeewebservice/
Вот ссылка на веб-приложение [production], которое вызывает WS при первой загрузке страницы:
http://www.zipeee.com/Zipeee/
Вот ссылка на веб-приложение [newVersion], которое не может вызвать тот же WS:
http://www.zipeee.com/zVersion2/
Вот источник на странице вызова:
Imports System.Data
Partial Class frmZipeee
Inherits System.Web.UI.Page
Public wsZipeee As New ProxyZipeeeService.WSZipeee.Zipeee
Dim dsStandardMsg As DataSet
Dim dtStandardMsg As DataTable
Dim dsRandomMsg As DataSet
Dim dtRandomMsg As DataTable
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Not Page.IsPostBack Then
LoadMessage()
End If
End Sub
Private Sub LoadMessage()
Dim iCnt As Integer
Dim iValue As Integer
dsStandardMsg = Nothing
dsStandardMsg = wsZipeee.GetMessageByType(BizConstants.MsgType.Standard)
iCnt = dsStandardMsg.Tables(0).Rows.Count
If iCnt = 0 Then
Me.btnEnter.Text = "Click Here to Enter."
Else
Me.btnEnter.Text = dsStandardMsg.Tables(0).Rows(0).Item("MessageContent")
End If
dsStandardMsg.Dispose()
End Sub
End Class
Вот код из Reference.vb в прокси :
<System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/ZipeeeWebService/Zipeee/Get Message By Type", RequestElementName:="Get Message By Type", RequestNamespace:="http://tempuri.org/ZipeeeWebService/Zipeee", ResponseElementName:="Get Message By TypeResponse", ResponseNamespace:="http://tempuri.org/ZipeeeWebService/Zipeee", Use:=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle:=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)> _
Public Function GetMessageByType(ByVal iMsgType As Integer) As <System.Xml.Serialization.XmlElementAttribute("Get Message By TypeResult")> System.Data.DataSet
Dim results() As Object = Me.Invoke("GetMessageByType", New Object() {iMsgType})
Return CType(results(0),System.Data.DataSet)
End Function
Наконец, вот код в веб-службе :
<WebMethod(MessageName:="Get Message By Type")> _
Public Function GetMessageByType(ByVal iMsgType As Integer) As DataSet
Try
'create a connection...
con = New SqlConnection(sConnZipeee)
con.Open()
command = New SqlCommand("spGetMessageByType", con)
command.CommandType = CommandType.StoredProcedure
AppendParm(command, "@MessageType", SqlDbType.Int, iMsgType)
Dim adp As SqlDataAdapter = New SqlDataAdapter(command)
Dim ds As New DataSet
adp.Fill(ds, "TableMsg")
adp.Dispose()
command.Dispose()
con.Close()
Return ds
Catch ex As SqlException
...etc. 'As I read the trace output (below) we never got here nor to SQL
На этом рабочем веб-сервере под управлением IIS 6.0 Windows 2003 на веб-сайте по умолчанию есть 3 виртуальных каталога (Zipeee, zVersion2, ZipeeeWebService).
Каждый виртуальный каталог указывает на отдельный физический каталог на диске c веб-сервера. И производственная версия Zipeee, и новая версия zVersion2 используют прокси-класс с именем ProxyZipeeeService.dll . Я очень внимательно относился к публикации основного проекта Zipeee и веб-сервисов, в которых он нуждается. Например, на сервере разработки с использованием Visual Studio2008 я собрал и протестировал все 5 проектов (webservice1, webservice2, primarywebapp (i.e.zipeee), proxyclassforWS1, proxyclassforWS2). Новейшие версии всех этих DLL были помечены версией сборки, выбранной как 1.6. Все они работают на моей машине разработчика, и я опубликовал WS1, WS2 и zipeee на промежуточном сервере (IIS 6.0), и все они тоже там работают. Затем я публикую на общедоступном сервере, на котором размещены указанные выше URL. Новая версия веб-приложения помещается в отдельные папки на диске c и указывается vDir zVersion2. Он должен работать, но не может отобразить даже первую страницу из-за этой ошибки WS.
Я отследил сбой zVersion2 (он вызывает веб-метод GetMessageByType в событии загрузки страницы и сразу завершается с ошибкой). Вот оно (не очень длинное, но форматирование в SO немного грязное):
Информация о System.Web.Services.Asmx: 0: вызов XmlSerializer [Create XmlSerializer]
Метод: System.Xml.Serialization.XmlSerializer # 1669721556 :: FromMappings (System.Xml.Serialization.XmlMapping [] # 40041277 = [356], ProxyZipeeeService.WSZipeee.Zipeee # 50200644 = ProxyZipeeeService.WSZipeee.ipe)
Звонящий: System.Web.Services.Protocols.SoapClientType # 24827179 ::. Ctor (ProxyZipeeeService.WSZipeee.Zipeee # 50200644 = ProxyZipeeeService.WSZipeee.Zipeee)
ProcessId = 1456
LogicalOperationStack =
ThreadId = 1
DateTime = 2010-08-06T01: 58: 45.6541439Z
Отметка = 47298006836
Информация System.Web.Services.Asmx: 0: Возврат из XmlSerializer [Создать XmlSerializer]
Звонящий: System.Web.Services.Protocols.SoapClientType # 24827179 ::. Ctor (ProxyZipeeeService.WSZipeee.Zipeee # 50200644 = ProxyZipeeeService.WSZipeee.Zipeee)
ProcessId = 1456
LogicalOperationStack =
ThreadId = 1
DateTime = 2010-08-06T01: 58: 45.7791255Z
Отметка = 47298376293
Информация System.Web.Services.Asmx: 0: вызов XmlSerializer [Создать XmlSerializer]
Метод: System.Xml.Serialization.XmlSerializer # 1669721556 :: FromMappings (System.Xml.Serialization.XmlMapping [] # 64844482 = [160], ProxyEmergencyService.WSEmergency.Emergency # 88831384 = ProxyEmergencyService.WSEmergency.Emergency)
Вызывающая сторона: System.Web.Services.Protocols.SoapClientType # 46729429 ::. Ctor (ProxyEmergencyService.WSEmergency.Emergency # 88831384 = ProxyEmergencyService.WSEmergency.Emergency)
ProcessId = 1456
LogicalOperationStack =
ThreadId = 1
DateTime = 2010-08-06T01: 58: 45.8572390Z
Отметка = 47298680452
Информация System.Web.Services.Asmx: 0: Возврат из XmlSerializer [Создать XmlSerializer]
Вызывающая сторона: System.Web.Services.Protocols.SoapClientType # 46729429 ::. Ctor (ProxyEmergencyService.WSEmergency.Emergency # 88831384 = ProxyEmergencyService.WSEmergency.Emergency)
ProcessId = 1456
LogicalOperationStack =ThreadId = 1
DateTime = 2010-08-06T01: 58: 45.9353525Z
Отметка = 47298924420
Информация System.Web.Services.Asmx: 0: вызов XmlSerializer [Запрос на запись]
Метод: Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer192 # 13256970 :: Serialize (System.Xml.XmlTextWriter # 52203868 = .., System.Object [] # 72766 = [1], (null), (null))
Абонент: ProxyZipeeeService.WSZipeee.Zipeee # 654897 :: Serialize ()
ProcessId = 1456
LogicalOperationStack =
ThreadId = 1
DateTime = 2010-08-06T01: 58: 46.0915795Z
Отметка = 47299598906
Информация System.Web.Services.Asmx: 0: возврат из XmlSerializer [запрос на запись]
Абонент: ProxyZipeeeService.WSZipeee.Zipeee # 654897 :: Serialize ()
ProcessId = 1456
LogicalOperationStack =
ThreadId = 1
DateTime = 2010-08-06T01: 58: 46.0915795Z
Отметка = 47299606361
Информация System.Web.Services.Asmx: 0: вызов WebRequest.GetResponse
Метод: System.Net.HttpWebRequest # 5894079 :: GetResponse ()
Абонент: ProxyZipeeeService.WSZipeee.Zipeee # 654897 :: GetWebResponse ()
ProcessId = 1456
LogicalOperationStack =
ThreadId = 1
DateTime = 2010-08-06T01: 58: 46.0915795Z
Отметка = 47299607492
System.Web.Services.Asmx Ошибка: 0: исключение обнаружено в ProxyZipeeeService.WSZipeee.Zipeee # 654897 :: GetWebResponse.
System.Net.WebException: удаленный сервер возвратил ошибку: (400) неверный запрос.
ProcessId = 1456
LogicalOperationStack =
ThreadId = 1
DateTime = 2010-08-06T01: 58: 46.0915795Z
Отметка = 47299629487
Ошибка System.Web.Services.Asmx: 0: Сведения об исключении:
System.Net.WebException: удаленный сервер возвратил ошибку: (400) неверный запрос.
в System.Net.HttpWebRequest.GetResponse ()
в System.Web.Services.Protocols.WebClientProtocol.GetWebResponse (запрос WebRequest)
ProcessId = 1456
LogicalOperationStack =
ThreadId = 1
DateTime = 2010-08-06T01: 58: 46.0915795Z
Отметка = 47299654807
Информация System.Web.Services.Asmx: 0: вызов XmlSerializer [Запрос на запись]
Метод: Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer192 # 13256970 :: Serialize (System.Xml.XmlTextWriter # 53046711 = .., System.Object [] # 7658356 = [1], (null), (null)
Абонент: ProxyZipeeeService.WSZipeee.Zipeee # 1816341 :: Serialize ()
ProcessId = 1456
LogicalOperationStack =
ThreadId = 1
DateTime = 2010-08-06T01: 58: 56.9024879Z
Отметка = 47338202360