Служба RESTful WCF возвращает «Ресурс не найден».ошибка - PullRequest
5 голосов
/ 24 мая 2011

У меня есть служба RESTful, которая не работает.Когда я набираю URI в адресную строку, я получаю эту ошибку:

Ресурс не найден.

Описание: HTTP 404. Требуемый ресурс (или одна из его зависимостей) мог быть удален, изменилось его имя или временно недоступен.Пожалуйста, просмотрите следующий URL и убедитесь, что он написан правильно.

Запрошенный URL: /VirtualRUS/Service1.svc/

Я не могу сказать, почему он не работает.Я сравнил свой код и web.config с рабочим примером, и я не могу найти никаких отличий.

РЕДАКТИРОВАТЬ: Кроме того, я могу использовать службу просто отлично, если яиспользуйте сервисную ссылку.Это просто не работает, если я перехожу к URI, или, что более важно, когда я пытаюсь создать WebRequest.

Кто-нибудь знает, почему это не сработает?

Service1.cs:

[ServiceContract]
public interface IService1
{
   [OperationContract]
   [WebGet(UriTemplate = "/")]
   string Test(); 
}

Service1.svc.cs:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class Service1 : IService1
{
   public string Test()
   {
      return "It works!!";
   }
}

Web.Config:

<?xml version="1.0" ?>
<configuration>
    <configSections>
        <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
            <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
                <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
                <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
                    <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere" />
                    <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
                    <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
                    <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
                </sectionGroup>
            </sectionGroup>
        </sectionGroup>
    </configSections>
    <appSettings></appSettings>
    <connectionStrings>
        <add name="ResearchLibrary" connectionString="Server=XXXXXX" ; Initial Catalog=ResearchLibrary; user id=XXX; password=XXX " />
     </connectionStrings>
     <system.web>
        <compilation debug="true ">
            <assemblies>
                <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089 "/>
                <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35 "/>
            </assemblies>
        </compilation>

        <authentication mode="Windows "/>

        <pages>
            <controls>
                <add tagPrefix="asp " namespace="System.Web.UI " assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35 "/>
            </controls>
        </pages>
        <httpHandlers>
            <remove verb="* " path="*.asmx "/>
            <add verb="* " path="*.asmx " validate="false " type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35 "/>
            <add verb="* " path="*_AppService.axd " validate="false " type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35 "/>
            <add verb="GET,HEAD " path="ScriptResource.axd " type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35 " validate="false "/>
        </httpHandlers>
        <httpModules>
            <add name="ScriptModule " type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35 "/>
        </httpModules>
      <httpRuntime maxRequestLength="65536 "/>
    </system.web>
    <system.codedom>
        <compilers>
            <compiler language="c#;cs;csharp " extension=".cs " warningLevel="4 " type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ">
                <providerOption name="CompilerVersion " value="v3.5 "/>
                <providerOption name="WarnAsError " value="false "/>
            </compiler>
        </compilers>
    </system.codedom>
    <system.web.extensions>
        <scripting>
            <webServices>
            </webServices>
        </scripting>
    </system.web.extensions>

    <system.webServer>
        <validation validateIntegratedModeConfiguration="false "/>
        <modules>
            <add name="ScriptModule " preCondition="integratedMode " type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35 "/>
        </modules>
        <handlers>
            <remove name="WebServiceHandlerFactory-Integrated "/>
            <add name="ScriptHandlerFactory " verb="* " path="*.asmx " preCondition="integratedMode " type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35 "/>
            <add name="ScriptHandlerFactoryAppServices " verb="* " path="*_AppService.axd " preCondition="integratedMode " type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35 "/>
            <add name="ScriptResource " preCondition="integratedMode " verb="GET,HEAD " path="ScriptResource.axd " type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35 "/>
        </handlers>
    </system.webServer>
    <system.serviceModel>
        <services>
            <service name="ResearchUploadService.Service1 " behaviorConfiguration="ResearchUploadService.Service1Behavior ">
                <!-- Service Endpoints -->

            <endpoint address="customBinding " binding="customBinding " bindingConfiguration="basicConfig " contract="ResearchUploadService.IService1 "/>
            </service>
        </services>
        <behaviors>
            <serviceBehaviors>
                <behavior name="ResearchUploadService.Service1Behavior ">

                    <serviceMetadata httpGetEnabled="true "/>
                    <
                    <serviceDebug includeExceptionDetailInFaults="true "/>
                </behavior>
            </serviceBehaviors>
      </behaviors>
      <bindings>
         <customBinding>
            <binding name="basicConfig ">
               <binaryMessageEncoding/>
               <httpTransport transferMode="Streamed " maxReceivedMessageSize="67108864 "/>
            </binding>
         </customBinding>
      </bindings>
    </system.serviceModel>
</configuration>

1 Ответ

11 голосов
/ 24 мая 2011

Ваша конечная точка не является конечной точкой REST, это «нормальная» конечная точка SOAP (двоичное кодирование / http транспорт). Конечные точки REST определяются с определенной привязкой (webHttpBinding) и поведением (webHttp). Кроме того, Добавить ссылку на службу не работает для конечных точек REST, что также указывает на то, что если она работает для вас, то вы не используете конечную точку REST.

Чтобы изменить конечную точку на RESTful, вы можете изменить файл web.config, как показано ниже (он фактически добавляет конечную точку REST в дополнение к той, что у вас уже есть).

<system.serviceModel>
    <services>
        <service name="ResearchUploadService.Service1" behaviorConfiguration="ResearchUploadService.Service1Behavior">
            <!-- Service Endpoints -->

        <endpoint address="customBinding" binding="customBinding" bindingConfiguration="basicConfig" contract="ResearchUploadService.IService1"/>
        <endpoint address="" binding="webHttpBinding" behaviorConfiguration="REST" contract="ResearchUploadService.IService1"/>
        </service>
    </services>
    <behaviors>
        <serviceBehaviors>
            <behavior name="ResearchUploadService.Service1Behavior">

                <serviceMetadata httpGetEnabled="true"/>
                <serviceDebug includeExceptionDetailInFaults="true"/>
            </behavior>
        </serviceBehaviors>
        <endpointBehaviors>
           <behavior name="REST">
             <webHttp/>
           </behavior>
        </endpointBehaviors>
  </behaviors>
  <bindings>
     <customBinding>
        <binding name="basicConfig">
           <binaryMessageEncoding/>
           <httpTransport transferMode="Streamed" maxReceivedMessageSize="67108864"/>
        </binding>
     </customBinding>

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