繁体   English   中英

RESTful WCF 服务返回“找不到资源”。 错误

[英]RESTful WCF Service returns “The resource cannot be found.” error

我有一个不起作用的 RESTful 服务。 当我在地址栏中输入 URI 时,我收到此错误:

无法找到该资源。

描述:HTTP 404。您正在查找的资源(或其依赖项之一)可能已被删除、更改名称或暂时不可用。 请查看以下 URL 并确保拼写正确。

请求的 URL:/VirtualRUS/Service1.svc/

我不知道为什么它不起作用。 我将我的代码和 web.config 与一个工作示例进行了比较,但我找不到任何差异。

编辑:另外,如果我使用服务引用,我可以很好地使用该服务。 如果我导航到 URI,或者更重要的是,当我尝试创建WebRequest时,它就不起作用。

有谁知道为什么这不起作用?

服务1.cs:

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

服务1.svc.cs:

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

Web.配置:

<?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>

您的端点不是 REST 端点,而是“正常” SOAP 端点(二进制编码/ http 传输)。 REST 端点是使用特定绑定 (webHttpBinding) 和行为 (webHttp) 定义的。 此外,添加服务参考不适用于 REST 端点,这也表明如果它适用于您,那么您没有使用 REST 端点。

要将您的端点更改为 RESTful,您可以更改 web.config,如下所示(它实际上添加了一个 REST 端点,除了 SOAP 端点)。

<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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM