在 WCF 服务中找不到方法
本文关键字:找不到 方法 服务 WCF | 更新日期: 2023-09-27 18:33:14
我是创建WCF Web服务的新手。我正在使用带有目标框架 4.5 的 VS2012。我在项目中添加了一个 WCF 服务文件。在"IService.cs"中,我编写了以下代码
namespace _3TWebServ
{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.
[ServiceContract]
public interface IService1
{
[OperationContract]
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped,
RequestFormat = WebMessageFormat.Json,
UriTemplate = "Calculate")]
String Calculate(Inputs ip1);
}
[DataContract]
public class Inputs
{
[DataMember(Name = "Coil_type")]
public string Coil_type { get; set;}
[DataMember(Name = "Finned_length")]
public string Finned_length { get; set;}
}
}
并在"Service.svc.cs"中
namespace _3TWebServ
{
public class Service1 : IService1
{
[DataMember]
public string input;
public String Calculate(Inputs ip1)
{
String str = ip1.Coil_type + ip1.Finned_length;
return str;
}
}
}
但是当我运行我的服务时,问题来了,它没有显示我的方法 计算,当我传递我的 URL 如下时本地主机:2121/服务1.svc/计算它显示"方法不允许"错误。
我已经做了一些谷歌搜索并启用了我的IIS管理器目录浏览。我的配置文件如下
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.5" />
</system.web>
<system.serviceModel>
<services>
<service behaviorConfiguration="_3TWebServ.IService1" name="_3TWebServ.Service1">
<endpoint address="" behaviorConfiguration="Rest" binding="webHttpBinding" contract="_3TWebServ.IService1">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<!--endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />-->
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="_3TWebServ.IService1">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="Rest">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<directoryBrowse enabled="true"/>
</system.webServer>
</configuration>
我可以看到一些可能的问题。
- 您的计算方法是为 HTTP POST 请求设置的。您应该发出HTTP POST请求以获得正确的响应。
- 请求格式为 JSON(请求格式属性属性值),因此请确保请求正文包含 JSON 格式的参数({ "Coil_type" : "type", "Finned_length": 12 })。
- 为什么在服务实现上有 [DataMember] 公共字符串输入?服务实现通常应带有操作协定。