如何解决RESTful WCF服务返回“找不到资源”错误
|| 我有一个无法正常运行的RESTful服务。当我在地址栏中键入URI时,出现以下错误: 无法找到该资源。 说明:HTTP404。您正在寻找的资源(或其依赖项之一)可能已被删除,名称更改或暂时不可用。请查看以下网址,并确保其拼写正确。 要求的网址:/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,PublicKeyToken=31BF3856AD364E35\">
<section name=\"scriptResourceHandler\" type=\"System.Web.Configuration.ScriptingScriptResourceHandlerSection,PublicKeyToken=31BF3856AD364E35\" requirePermission=\"false\" allowDefinition=\"MachineToApplication\" />
<sectionGroup name=\"webServices\" type=\"System.Web.Configuration.ScriptingWebServicesSectionGroup,PublicKeyToken=31BF3856AD364E35\">
<section name=\"jsonSerialization\" type=\"System.Web.Configuration.ScriptingJsonSerializationSection,PublicKeyToken=31BF3856AD364E35\" requirePermission=\"false\" allowDefinition=\"Everywhere\" />
<section name=\"profileService\" type=\"System.Web.Configuration.ScriptingProfileServiceSection,PublicKeyToken=31BF3856AD364E35\" requirePermission=\"false\" allowDefinition=\"MachineToApplication\" />
<section name=\"authenticationService\" type=\"System.Web.Configuration.ScriptingAuthenticationServiceSection,PublicKeyToken=31BF3856AD364E35\" requirePermission=\"false\" allowDefinition=\"MachineToApplication\" />
<section name=\"roleService\" type=\"System.Web.Configuration.ScriptingRoleServiceSection,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,PublicKeyToken=B77A5C561934E089 \"/>
<add assembly=\"System.Web.Extensions,PublicKeyToken=31BF3856AD364E35 \"/>
</assemblies>
</compilation>
<authentication mode=\"Windows \"/>
<pages>
<controls>
<add tagPrefix=\"asp \" namespace=\"System.Web.UI \" assembly=\"System.Web.Extensions,PublicKeyToken=31BF3856AD364E35 \"/>
</controls>
</pages>
<httpHandlers>
<remove verb=\"* \" path=\"*.asmx \"/>
<add verb=\"* \" path=\"*.asmx \" validate=\"false \" type=\"System.Web.Script.Services.ScriptHandlerFactory,PublicKeyToken=31BF3856AD364E35 \"/>
<add verb=\"* \" path=\"*_AppService.axd \" validate=\"false \" type=\"System.Web.Script.Services.ScriptHandlerFactory,PublicKeyToken=31BF3856AD364E35 \"/>
<add verb=\"GET,HEAD \" path=\"ScriptResource.axd \" type=\"System.Web.Handlers.ScriptResourceHandler,PublicKeyToken=31BF3856AD364E35 \" validate=\"false \"/>
</httpHandlers>
<httpModules>
<add name=\"ScriptModule \" type=\"System.Web.Handlers.ScriptModule,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,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,PublicKeyToken=31BF3856AD364E35 \"/>
</modules>
<handlers>
<remove name=\"WebServiceHandlerFactory-Integrated \"/>
<add name=\"ScriptHandlerFactory \" verb=\"* \" path=\"*.asmx \" preCondition=\"integratedMode \" type=\"System.Web.Script.Services.ScriptHandlerFactory,PublicKeyToken=31BF3856AD364E35 \"/>
<add name=\"ScriptHandlerFactoryAppServices \" verb=\"* \" path=\"*_AppService.axd \" preCondition=\"integratedMode \" type=\"System.Web.Script.Services.ScriptHandlerFactory,PublicKeyToken=31BF3856AD364E35 \"/>
<add name=\"ScriptResource \" preCondition=\"integratedMode \" verb=\"GET,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,如下所示(实际上,它已在SOAP端点之外添加了一个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>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。