#vb.net #wcf #web-services
#vb.net #wcf #веб-службы
Вопрос:
Я не могу заставить это работать должным образом. Генерируется исключение (EndPointNotFound) и сообщение об ошибке без трассировки стека, которое я получаю, приведено ниже.
Я выполнил все очевидные вещи (я думаю!), проверил соответствие URI конечной точки, что служба действительно запущена и что я могу запустить ее со своего компьютера.
Буду рад опубликовать код, если вы дадите мне знать, что вам нужно, чтобы помочь!
Любая помощь очень ценится!
«Не было прослушивания конечной точкой по URL / Service.svc, которая могла бы принять сообщение. Это часто вызвано неправильным адресом или действием SOAP. Смотрите InnerException, если оно присутствует, для получения более подробной информации.»
Удаленный сервер вернул сообщение об ошибке: (407) Требуется аутентификация через прокси. Описание: Необработанное исключение возникло во время выполнения текущего веб-запроса. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.
Сведения об исключении: System.Net.WebException: Удаленный сервер вернул ошибку: (407) Требуется аутентификация через прокси.
Ошибка источника:
Строка 1140:
Строка 1141: Общедоступная функция getMember (использует ArdbegMember1 как ArdbegWeb.ArdbegMember) Как ArdbegWeb.ArdbegMember реализует IArdbegWeb.Строка 1142 getMember: возвращает MyBase.Канал.getMember (ArdbegMember1) Строка 1143: завершает строку функции 1144:Исходный файл: C:Documents и настройкиamayberry Мои документы Visual Studio 2008 Проекты xpertformstestardbegardbegbegweb.vb Строка: 1142
Трассировка стека:
[WebException: удаленный сервер вернул ошибку: (407) Требуется аутентификация через прокси.] System.Net.HttpWebRequest.GetRequestStream(TransportContext amp; context) 1868309 System.Net.HttpWebRequest.GetRequestStream() 13 System.ServiceModel.Каналы.WebRequestHttpOutput.getOutputStream() 68
[Исключение EndpointNotFoundException: не было прослушивания конечной точкой вhttps://www.URL/service.svc которая могла бы принять сообщение. Это часто вызвано неправильным адресом или действием SOAP. Смотрите InnerException, если оно присутствует, для получения более подробной информации.] System.Runtime.Удаленное подключение.Прокси.RealProxy.Обработчик обратного сообщения (iMessage reqMsg, iMessage retMsg) 7596735 System.Runtime.Удаленное подключение.Прокси.RealProxy.PrivateInvoke (MessageData amp; msgData, тип Int32) 275 ardbeg.IArdbegWeb.getMember(ArdbegMember ArdbegMember1) 0 ardbeg.ArdbegWebClient.getMember(ArdbegMember ArdbegMember1) в C:Documents и настройкиamayberry Мои документы Visual Studio 2008 Проекты xpertformstestardbegardbegbegArdbegWeb.vb:1142 ardbeg._ ПО умолчанию.Button1_Click1 (отправитель объекта, EventArgs e) в C:Documents и настройкиamayberry Мои документы Visual Studio 2008 Проекты xpertformstestardbegardbegDefault.aspx.vb:40 System.Web.UI.WebControls.Кнопка.OnClick(EventArgs e) 111 System.Web.UI.WebControls.Кнопка.Поднимите postbackevent (аргумент события String) 110 System.Web.UI.WebControls.Кнопка.System.Web.UI.IPostBackEventHandler.Поднимите Postbackevent (аргумент события String) 10 System.Web.UI.Page.RaisePostBackEvent (IPostBackEventHandler SourceControl, строка eventArgument) 13 System.Web.UI.Page.RaisePostBackEvent (NameValueCollection postData) 36 System.Web.UI.Page.ProcessRequestMain (Логические includeStagesBeforeAsyncPoint, логические includeStagesAfterAsyncPoint) 1565
Редактировать
Я думаю, что это должно быть проблемой с тем, как мое приложение на самом деле попадает в веб-службу — хотя мой браузер может получить доступ к веб-сервису (для этого мне приходится использовать прокси-сервер не по умолчанию из-за ограничений доступа по всему бизнесу), я не думаю, что мое скомпилированное приложение автоматически использует это. Есть ли какой-либо очевидный способ проверить, и как бы мне заставить его использовать это, если это проблема?
Редактировать
Код из-за моей главной страницы:
Dim myBinding As New WSHttpBinding()
myBinding.Security.Mode = SecurityMode.Transport
myBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate
Dim ea As New EndpointAddress("https://URL/service.svc")
Dim cc As New ArdbegWebClient(myBinding, ea)
cc.ClientCredentials.ClientCertificate.SetCertificate( _
StoreLocation.CurrentUser, StoreName.My, X509FindType.FindBySubjectName, "CERTIFICATE")
Dim abMem As New ArdbegMember
Dim retMem As New ArdbegMember
abMem.MemberID = TextBox1.Text
Try
cc.Open()
retMem = cc.GetMember(abMem)
MesgBox(retMem.Surname)
cc.Close()
Catch cex As CommunicationException
MesgBox("CommEX - " amp; cex.Message)
cc.Abort()
Catch tex As TimeoutException
MesgBox("TimeEX - " amp; tex.Message)
cc.Abort()
Finally
MesgBox("Closed the Client")
End Try
Все, что я пытаюсь сделать на данный момент, это ввести идентификационный номер клиента и вернуть его фамилию через веб-сервис — просто чтобы я знал, что это работает.
Комментарии:
1. «Удаленный сервер вернул ошибку: (407) Требуется проверка подлинности через прокси». Вы подключаетесь к Интернету через HTTP-прокси?
2. Просто обычный веб-прокси, обращенный вперед. Существуют различные ограничения (для ограничения того, к чему другие члены компании имеют доступ), поэтому я использую другой прокси-сервер (все еще внутренний для компании) без этих ограничений на нем.
3. Сообщение довольно четкое: прокси-сервер между вами и целью требует аутентификации. Вы уверены, что ваш код использует этот другой прокси?
4. К такому выводу я тоже пришел (см. Редактирование внизу моего вопроса). Поскольку это так, возникает вопрос, как заставить мой код использовать этот прокси?
5. Можете ли вы опубликовать какой-нибудь код о том, как вы подключаетесь к сервису?
Ответ №1:
Я разобрался с проблемой, по какой-то причине изменив настройки прокси-сервера в Internet Explorer (несмотря на то, что я им вообще не пользуюсь), чтобы они соответствовали настройкам, которые, как я знаю, позволяют мне заходить в веб-службу, похоже, позволил моему коду попасть в нее.
я не знаю, как и почему, потому что мой код всегда выполняется только в FF, но это, похоже, позволило ему работать.