Сервис asp.net wcf выбрасывает 404 - PullRequest
0 голосов
/ 02 мая 2011

Я пытаюсь реализовать службу wcf, но получаю ошибку 404. Я хочу иметь службу REST, которая возвращает JSON.

См. Код, который я имею ниже, однако, когда я иду на: www.domain.nl/api или www.domain.nl/api/getobjects, я получаю 404

Чего мне не хватает?

*** web.config

 <system.serviceModel>
   <services>
     <service name="wcf_geolocation">
       <!-- not sure which class I should name here, see my attached code for definition of interface-->
       <host>
         <baseAddresses>
           <add baseAddress="http://www.domain.nl/api" />
           <!--  /api is the URL I want, do I need to configure that in URL rewrite or IIS or...?-->
         </baseAddresses>
       </host>
       <endpoint address="getobjects" binding="wsHttpBinding" contract="Iwcf_geolocation" />
     </service>
   </services>

   <behaviors>
   <serviceBehaviors>
    <behavior name="">
     <serviceMetadata httpGetEnabled="true" />
     <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
   </serviceBehaviors>
  </behaviors>
  <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
 </system.serviceModel>

*** Iwcf_geolocation.vb

Imports System.ServiceModel
Imports System
Imports System.Collections.Generic
Imports System.ServiceModel.Description
Imports System.ServiceModel.Web
Imports System.Text
' NOTE: You can use the "Rename" command on the context menu to change the interface name "Iwcf_geolocation" in both code and config file together.
<ServiceContract()>
Public Interface Iwcf_geolocation

    <OperationContract()>
    Sub DoWork()


    <OperationContract()> _
<WebGet()> _
    Function EchoWithGet(ByVal s As String) As String

    <OperationContract()> _
    <WebInvoke()> _
    Function EchoWithPost(ByVal s As String) As String


End Interface

*** wcf_geolocation.vb

' NOTE: You can use the "Rename" command on the context menu to change the class name "wcf_geolocation" in code, svc and config file together.
Public Class wcf_geolocation
    Implements Iwcf_geolocation

    Public Sub DoWork() Implements Iwcf_geolocation.DoWork
    End Sub

    Public Function EchoWithGet(ByVal s As String) As String Implements Iwcf_geolocation.EchoWithGet
        Return "You said " + s
    End Function

    Public Function EchoWithPost(ByVal s As String) As String Implements Iwcf_geolocation.EchoWithPost
        Return "You said " + s
    End Function

End Class

Ответы [ 2 ]

0 голосов
/ 30 апреля 2015

Запустить Диспетчер серверов (на панели задач и в меню Пуск) Выберите сервер для администрирования (возможно, локальный сервер) Прокрутите вниз до раздела «Роли и возможности». Выберите «Добавить роль или элемент» из выпадающего списка задач В диалоговом окне «Мастер добавления ролей или компонентов» нажмите «Функции» в списке страниц слева. Разверните «.Net 3.5» или «.Net 4.5», в зависимости от того, что вы установили. (Вы можете вернуться к экрану «Роли», чтобы добавить его, если у вас его нет. В разделе «Службы WCF» установите флажок «HTTP-активация». Вы также можете добавить не-http типы, если знаете, что они вам нужны (tcp, именованные каналы и т. Д.). Нажмите кнопку «Установить».

0 голосов
/ 02 мая 2011

Похоже, что проблема в Binding для REST должна быть webHttpBinding . Я внес некоторые изменения в ваш web.config.try this

<system.serviceModel>
    <services>
      <service name="wcf_geolocation" behaviorConfiguration="ServiceBehavior">
        <!-- not sure which class I should name here, see my attached code for definition of interface-->
        <host>
          <baseAddresses>
            <add baseAddress="http://www.domain.nl/api" />
            <!--  /api is the URL I want, do I need to configure that in URL rewrite or IIS or...?-->
          </baseAddresses>
        </host>
        <endpoint address="getobjects"  behaviorConfiguration="JsonBehavior" binding="webHttpBinding" contract="Iwcf_geolocation" />
      </service>
    </services>

    <behaviors>
      <endpointBehaviors>

        <behavior name="JsonBehavior">
          <webHttp />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="ServiceBehavior">
          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

EDIT

Привет! Я обновил ответ в соответствии с вашим комментарием. Пожалуйста, посмотрите и дайте мне знать.

Imports System.Collections
Imports System.Collections.Generic
Imports System.Data
Imports System.Diagnostics
Imports System.ServiceModel
Imports System.ServiceModel.Description
Imports System.ServiceModel.Web
Imports System.Text
' NOTE: You can use the "Rename" command on the context menu to change the interface name "Iwcf_geolocation" in both code and config file together.
<ServiceContract> _
Public Interface Iwcf_geolocation


    <OperationContract> _
    Sub DoWork()

    <OperationContract> _
    <WebGet(RequestFormat := WebMessageFormat.Json, ResponseFormat := WebMessageFormat.Json, UriTemplate := "EchoWithGet/{s}")> _
    Function EchoWithGet(s As String) As String

    <OperationContract> _
    <WebInvoke(Method := "POST", UriTemplate := "EchoWithPost/{s}", BodyStyle := WebMessageBodyStyle.Bare)> _
    Function EchoWithPost(s As String) As String


End Interface





Imports System.Collections
Imports System.Collections.Generic
Imports System.Data
Imports System.Diagnostics

' NOTE: You can use the "Rename" command on the context menu to change the class name "wcf_geolocation" in code, svc and config file together.
Public Class wcf_geolocation
    Inherits Iwcf_geolocation

    Public Sub DoWork()
    End Sub
    Public Function EchoWithGet(s As String) As String
        Return "You said " & s
    End Function

    Public Function EchoWithPost(s As String) As String
        Return "You said " & s
    End Function

End Class

<ч />

    <behaviors>
      <endpointBehaviors>

        <behavior name="JsonBehavior">
          <webHttp />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="ServiceBehavior">
          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

Как проверить сервис в браузере

http://[XXXX.XXX]/ServiceName.svc/EchoWithGet/peter

для EchoWithPost службы, вы должны написать код или вы можете проверить это с помощью fiddler.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...