Member 10103170 Ответов: 2

Остальные ошибки ответа сервера 500


Привет,
Я создаю веб-сайт, который будет действовать как наш API для нашей внутренней базы данных.
Я думаю, что иду в правильном направлении, но продолжаю натыкаться на кирпичную стену.
Код сервера и моя процедура тестирования ниже.
Error2 = Ошибка Протокола
Любой указатели, чтобы решить, будет принята с благодарностью!
Пол

Что я уже пробовал:

ЗАПИСКА:
просто добавить:
<system.web>
  <webServices>
    <protocols>
      <add name="HttpGet"/>
      <add name="HttpPost"/>
    </protocols>
  </webServices>
</system.web>

к конфигурации веб-сервера.
Сейчас:
https://WEBSITE/service.asmx/TestRest
Возвращается:
<?xml version="1.0" encoding="UTF-8"?>
<string xmlns="http://localhost:51561/APIServer/">{"qtest":{"response":"hello"}}</string>

Становится лучше, но мой тестовый сайт все еще терпит неудачу. Та же ошибка, что и ниже.





Server Code: Service.vb file:

<WebService(Namespace:="http://localhost:51561/APIServer/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Public Class Service
    Inherits System.Web.Services.WebService

    <WebMethod()> _
    Public Function TestRest() As String

        Dim sjon As String = "{"
        sjon = sjon & """qtest"":{""response"":""hello""}"
        sjon = sjon & "}"

        Return sjon
    End Function
End Class

Service.asmx file:
<%@ WebService Language="vb" CodeBehind="~/App_Code/Service.vb" Class="Service" %>


Calling the Webserver with this:

        Dim returnedData As String = ""
        Dim error2 As String = ""

        Try

            Dim DataToSend As String = ""
 

            Dim urlLive As String = "https://WEBSITENAME/Service.asmx/TestRest"  

            Dim postAddress = New Uri(urlLive)

            Dim request = DirectCast(WebRequest.Create(postAddress), HttpWebRequest)

            request.Method = "POST"
            request.ContentType = "application/json"  

            request.Headers.Add("AcceptTypes", "text/plain")
            request.Headers.Add("Accept-Language", "en-US")
            request.Headers.Add("UserAgent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)")

            request.ContentLength = Len(DataToSend).ToString
 

            request.ProtocolVersion = HttpVersion.Version11

            Dim postByteData As Byte() = System.Text.UTF8Encoding.UTF8.GetBytes(DataToSend)
            request.ContentLength = postByteData.Length

            Using postStream As Stream = request.GetRequestStream()
                postStream.Write(postByteData, 0, postByteData.Length)
            End Using

            Using resp = TryCast(request.GetResponse(), HttpWebResponse)
                Dim reader = New StreamReader(resp.GetResponseStream())
                returnedData = reader.ReadToEnd()
            End Using

        Catch exw As WebException

            Try
                Dim httpResponse As HttpWebResponse = CType(exw.Response, HttpWebResponse)
                returnedData = "Error - " & CInt(httpResponse.StatusCode).ToString() & " - " & httpResponse.StatusCode.ToString()

                error2 = exw.Status.ToString

            Catch ex As Exception
                returnedData = "Error - Site"
            End Try

        Catch ex As Exception

            returnedData = "Error - Exception Error"

        End Try

        error2 = error2 & ""
        returnedData = returnedData & ""

Wessel Beulink

Можете ли вы опубликовать ошибку 500?
Кроме того, что произойдет, если вы прямо позвоните: https://WEBSITENAME/Service.asmx/TestRest из Вашего браузера?

Member 10103170

"Ошибка-500-InternalServerError"



https://WEBSITENAME/service.asmx/TestRest

Возвращается:
Формат запроса не распознается для URL-адреса, неожиданно заканчивающегося на "/ TestRest".
трассировка стека:
[InvalidOperationException: формат запроса не распознан для URL-адреса, неожиданно заканчивающегося на '/TestRest'.]
Системы.Веб.Услуги.Протоколы.WebServiceHandlerFactory.CoreGetHandler(Type type, HttpContext context, HttpRequest request, HttpResponse response) +484886
Системы.Веб.Услуги.Протоколы.WebServiceHandlerFactory.GetHandler(HttpContext context, String verb, String url, String filePath) +209
Системы.Веб.Сценарий.Услуги.ScriptHandlerFactory.GetHandler(HttpContext context, String requestType, String url, String pathTranslated) +47
System.Web.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () +346
Системы.Веб.Класса HttpApplication.ExecuteStep (iexecutionstep step, Boolean& completedSynchronously) +155

F-ES Sitecore

Вы погуглили сообщение об ошибке и хотя бы попробовали некоторые предложения?

2 Ответов

Рейтинг:
20

Wessel Beulink

У вас есть ошибка в вашем пространстве имен вы используете фиксированный url:

<WebService(Namespace:="http://localhost:51561/APIServer/")> _


если вы использовали динамический url-адрес, то он должен быть:
<System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _


Вы должны использовать динамическую привязку url-адреса или изменить localhost:51561 на WEBSITENAME:{port}
Но я бы выбрал динамичный путь, чем вам не нужно беспокоиться об этом. Вы можете установить это в свойствах вашего проекта.
У меня есть хорошие учебники от codeproject здесь: [Как-сделать-свой-веб-справочник]

если вы не вызываете динамический url-адрес, вам нужно установить его в своем приложении перед вызовом.

Это должно исправить вашу ошибку 500.

Лучший способ использовать ваш веб-сервис-это просто добавить url-адрес к вашему проекту под ссылкой, что сделает его намного проще для вас вместо использования веб-запроса.

Просто зайдите в свой проект и скажите: add refenerce => Service reference. Пройдите вниз по вашему url-адресу, и вы сможете использовать его в своем проекте с результатом и комментариями и т. д.
Вот пример того, как использовать ваш суповый сервис при добавлении:

Dim service As New ServiceReference1.Service1SoapClient
Dim test = service.TestRest()


Member 10103170

https://WebsiteName/service.asmx/TestRest

Теперь дает мне:
& lt;?xml version=" 1.0 "encoding=" UTF-8"?>
&ЛТ;строку префиксом xmlns="https://WebsiteName/"&ГТ;{"это связано с тем,": {"Ответ":"Здравствуйте"}}

Но мой тестовый сайт все еще терпит неудачу из-за ошибки 500. Означает ли это, что теперь это мой тестовый сайт, а не мой серверный код? Спасибо

Wessel Beulink

Вы развернули свой сайт с помощью http://localhost:51561/APIServer / Итак:
https://WebsiteName/APIServer/qtest в вашем случае это недоступно.

Потому что api будет искать:
http://localhost:51561/APIServer/qtest

Если вы измените свое пространство имен на https://WebsiteName/APIServer и разверните его снова, это, вероятно, сработает.


Вы можете попробовать, но я определенно рекомендую вам использовать ссылку на soap-сервер. Или api restSharp или что-то в этом роде. Делает кодирование намного более плавным :)

Member 10103170

Спасибо Вессел - ваши комментарии заставили меня посмотреть в правильном направлении.
Пол :-)

Рейтинг:
2

Member 10103170

В коде сервера отсутствовала первая строка (остановил доступ к нему через скрипт..):

<System.Web.Script.Services.ScriptService()> _
<WebService(Namespace:="https://WEBSITENAME/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Public Class Service
    Inherits System.Web.Services.WebService