WCF REST POST服务 - 从HTML FORM调用时不允许使用的方法

时间:2013-08-01 11:04:27

标签: c# wcf rest

突然间我收到错误'方法不允许'。从HTML表单调用WCF REST POST服务时如下所示(它在开发,UAT,生产环境中较早使用,但现在失败了。

可能导致此问题的原因是什么?什么是潜在的解决方案?

<form action="http://localhost:8750/MyService/MyEmailService/RecordResponse" method="post" runat="server">
    <div align="left">
        <input type="hidden" name="userid" value="abc">
        <input type="hidden" name="itemid" value="625">
        <select name="response">
            <option value="Approved">Approve</option>
            <option value="Rejected">Reject</option>
        </select>
        <textarea cols="40" rows="5" name="comment">Add comments here</textarea>
        <input type="Submit" value="Submit">
    </div>
</form>

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class MyEmailService: IMyEmailService, ISessionAwareService
{
    [OperationContract]
    [WebInvoke(UriTemplate = "/RecordResponse", Method = "POST")]
    public void RecordResponse(Stream stream)
    { 
        // My business logic
    }
}

配置如下:

<endpointBehaviors>
    <behavior name="webby">
      <webHttp helpEnabled="true"/>
    </behavior>

  <service name="CTRL.Server.CommandHandlerService.EmailHandlerService">
    <endpoint address="http://localhost:8750/MyService/MyEmailService" 
              binding="webHttpBinding" 
              contract="MyService.ServiceContracts.IEmailService" 
              behaviorConfiguration="webby"/>

  <webHttpBinding>
    <binding name="secure">
      <security mode="Transport">
        <transport clientCredentialType="Basic" />
      </security>
    </binding>
  </webHttpBinding>

1 个答案:

答案 0 :(得分:0)

好的,这是一个背景,我们以编程方式生成带有HTML的电子邮件,其表单的行为是在提交html表单时调用WCF REST服务。

电子邮件客户端是用户用来阅读电子邮件的Outlook。

有一些基础设施升级,并且以某种方式提交html表单,WCF的POST请求未正确生成。

要解决此问题,我们将WCF服务从POST修改为GET,编写了一个Javascript方法来获取表单数据,并通过在WCF REST服务URI中包含html表单数据来调用WCF服务。