C# 通过过帐字符串测试WCF服务
我试图通过使用fiddler发布一个字符串值来测试我的示例WCF服务,但它返回了一个405错误。下面是我的代码C# 通过过帐字符串测试WCF服务,c#,wcf,fiddler,C#,Wcf,Fiddler,我试图通过使用fiddler发布一个字符串值来测试我的示例WCF服务,但它返回了一个405错误。下面是我的代码 [OperationContract] [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat= WebMessageFormat.Json, UriTemplate = "/json/process", BodyStyle = WebMessageBodyStyle.Bare)
[OperationContract]
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat= WebMessageFormat.Json, UriTemplate = "/json/process", BodyStyle = WebMessageBodyStyle.Bare)]
string ProcessOrderJSON(string request)
{
return "test json process";
}
下面是我的fiddler数据
URL: localhost:3173/json/process
User-Agent: Fiddler
content-type: application/json
Host: localhost:3173
RequestBody:
"testdata"
下面是我的配置文件。请帮我找出我的问题。提前谢谢
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
<sectionGroup name="EmailSettings">
<section name="Default" type="System.Configuration.NameValueSectionHandler" />
<section name="Appraisal" type="System.Configuration.NameValueSectionHandler" />
<section name="CustomerService" type="System.Configuration.NameValueSectionHandler" />
<section name="TestAccounts" type="System.Configuration.NameValueSectionHandler" />
</sectionGroup>
</configSections>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<customErrors mode="Off" />
</system.web>
<system.webServer>
<handlers>
<remove name="svc-Integrated-4.0" />
<add name="svc-Integrated-4.0" path="*" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</modules>
<directoryBrowse enabled="true" />
</system.webServer>
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
<behaviors>
<serviceBehaviors>
<behavior name="MEXGET">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="MEXGET" name="Appraisal.OrderService.WCF.OrderServiceMex">
</service>
</services>
<standardEndpoints>
<webHttpEndpoint>
<standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true" transferMode="Streamed" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
<readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxDepth="1000" maxNameTableCharCount="16384" />
</standardEndpoint>
</webHttpEndpoint>
</standardEndpoints>
</system.serviceModel>
<log4net>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<param name="File" value="OrderService.log" />
<!-- Example using environment variables in params -->
<!-- <param name="File" value="${TMP}\\ApplicationKit.log" /> -->
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d %-2p - %m%n" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<LevelMin value="INFO" />
<LevelMax value="INFO" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
<appender name="ErrorsFileAppender" type="log4net.Appender.FileAppender">
<param name="File" value="ErrorOrderService.log" />
<!-- Example using environment variables in params -->
<!-- <param name="File" value="${TMP}\\ApplicationKit.log" /> -->
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-2p %c [%x] - %m%n" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="ERROR" />
<LevelMax value="FATAL" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
<root>
<level value="ALL" />
<appender-ref ref="FileAppender" />
<appender-ref ref="ErrorsFileAppender" />
</root>
</log4net>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Common.Logging" publicKeyToken="af08829b84f0328e" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.3.1.0" newVersion="2.3.1.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
405 HTTP状态代码表示服务不支持该请求方法 使用WebInvoke属性装饰的服务方法及其设置为POST的方法属性。 如果使用GET方法调用服务方法,则返回此状态代码
使用POST更改您的请求方法。创建一个简单的控制台应用程序,并使用WebClient访问WCF rest服务
private static void PlaceOrder()
{
string data = "your string";
WebClient webClient = new WebClient();
webClient.Headers["Content-type"] = "application/json";
webClient.Encoding = Encoding.UTF8;
webClient.UploadString("http://localhost:61090/OrderService.svc
/PlaceOrder", "POST", data);
}
您在配置文件中遇到的问题,需要显式添加webHttp端点,以下是最小配置文件的示例:
<system.serviceModel>
<services>
<service name="WcfServiceLibrary3.Service1">
<host>
<baseAddresses>
<add baseAddress = "http://localhost:8733/" />
</baseAddresses>
</host>
<endpoint address="web" binding="webHttpBinding" contract="WcfServiceLibrary3.IService1" behaviorConfiguration="webBehavior"/>
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="webBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
在这种情况下,URL将是http://localhost:8733/web/json/process您能告诉我您的项目类型吗?是WCF服务库还是WCF服务应用程序?请共享您的*.config文件这是一个WCF服务库。。我用我的.config编辑我的问题没有包含配置文件详细信息的编辑?我只是添加了我的配置文件。。很抱歉耽搁了。我正在使用POST in方法,我没有使用任何get。我注意到,您的方法体也声明为添加了OperationContract属性。但您应该在服务接口中添加OperationContract属性。并且不能在服务接口中声明方法体。你确定你发布了正确的代码吗?我尝试了上面的配置文件,当我尝试在UTL上面打开时,它在“/”应用程序中显示服务器错误。找不到资源。