404 на службе WCF.Запуск хоста и получение правильного URI - PullRequest
0 голосов
/ 27 февраля 2012

Я пытаюсь создать свой первый WCF-сервис.Я читал эту страницу: http://www.colossaltechnologies.com/vd/index.php?option=com_content&view=article&id=128%3Awcf-rest-example&Itemid=101 и попытался скопировать код.

Однако у меня нет службы WCF в отдельном приложении, но я добавил ее в существующий проект веб-приложения.Услуга не понадобится вне рамок моего текущего проекта.Чего я хочу добиться, так это того, что эту службу отдыха можно вызывать из мобильных приложений (iOS / Android / Windows Phone), которые необходимо разработать.

Я заметил этот шаг в приведенном выше руководстве: «Создайте хост дляСлужба "Теперь, что мне интересно: действительно ли нужно запускать этот код для запуска хоста, и если да, то когда и как мне запустить его на рабочем сервере?

Кажется, что мне действительно нужночто-то сделать с этим запуском хоста, потому что теперь, когда я захожу по адресу: www.test.com/api/job/bob (я также пробовал www.test.com/job/bob).Я получаю 404.

Ниже моего кода, я надеюсь, что любой сможет увидеть, что я делаю неправильно.Я не использую правильный URI?Что я пропустил?

Iweddingservice.vb

Imports System.ServiceModel
Imports System.Web
Imports System.IO
Imports System.Runtime.Remoting.Activation
Imports System.Collections.Generic

Namespace RestService
<ServiceContract()>
Public Interface Iweddingservice

    <OperationContract()> _
<Web.WebGet(UriTemplate:="job/{name}")> _
    Function DoJob(name As String) As String

End Interface
End Namespace

** weddingservice.svc.vb **

Imports System.ServiceModel
Imports System.ServiceModel.Web
Imports System.IO
Imports System.ServiceModel.Activation
Imports System.Web.Script.Serialization
Imports System.Collections.Generic
Imports System.Xml
Imports System.Net

Namespace RestService
Public Class weddingservice
    Implements Iweddingservice

    Public Function DoJob(name As String) As String Implements Iweddingservice.DoJob
        Return String.Format("Hello, {0}", name)
    End Function


End Class

End Namespace

** web.config **

<rewrite>
<rules>
<rule name="api access 2">
 <match url="^api/job/$" />
 <action type="Rewrite" url="weddingservice.svc/api/job/" appendQueryString="true" />
</rule>
</rules>
</rewrite>

<system.serviceModel>
  <services>
    <service name="RestService.weddingservice">
      <host>
        <baseAddresses>
          <add baseAddress="http://www.test.com/api"/>
        </baseAddresses>
      </host>
      <endpoint binding="webHttpBinding" contract="RestService.Iweddingservice" />
    </service>
  </services>
</system.serviceModel>

Ответы [ 2 ]

1 голос
/ 27 февраля 2012

Вы пытаетесь разместить службу в IIS? Если да, то вы не можете предоставить адресную часть - это будет подразумеваться расположением служебного файла. Например, если ваш служебный файл weddingservice.svc находится в корневом каталоге, используйте конфигурацию, например

   <system.serviceModel>
     <services>
        <service name="WeddingService">
            <endpoint binding="webHttpBinding" contract="RestService.Iweddingservice"
                      behaviorConfiguration="webHttp"/>
        </service>
     </services>
     <behaviors>
        <endpointBehaviors>
            <behavior name="webHttp">
                <webHttp/>
            </behavior>
        </endpointBehaviors>
     </behaviors>
  </system.serviceModel>

Теперь ваш сервис будет доступен для просмотра, скажем, http://localhost/weddingservice.svc, а ваш метод - http://localhost/weddingservice.svc/job. Вместо localhost у вас может быть любой адрес хоста, поддерживаемый вашим веб-сайтом (например, www.xyz.com). Для устранения расширения .svc необходимо использовать правило перезаписи или маршрутизацию ASp.NET.

Наконец, если вы не размещаете службу в IIS, проверьте базовый адрес - правильно ли настроен DNS и т. Д. Попробуйте URL без переписывания, например, www.test.com/weddingservice.svc/job.

РЕДАКТИРОВАТЬ : Похоже, вы все еще застряли на этом. Я бы посоветовал вам следовать пошаговым инструкциям ниже:

С этого следует начать: http://www.codeproject.com/Articles/105273/Create-RESTful-WCF-Service-API-Step-By-Step-Guide

Это немного подробно и охватывает довольно много вещей: http://blogs.msdn.com/b/endpoint/archive/2010/01/07/getting-started-with-wcf-webhttp-services-in-net-4.aspx

Вот и другие полезные ссылки:

http://msdn.microsoft.com/en-us/library/bb412172.aspx
http://msdn.microsoft.com/en-us/library/dd203052.aspx
http://msdn.microsoft.com/en-us/library/dd699772.aspx (больше образцов)

0 голосов
/ 27 февраля 2012

Просто продолжайте следовать азбуке WCF. Как вы планируете разместить свой сервис? Если вы планируете разместить службу с использованием IIS, базовый адресный тег будет игнорироваться

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