0

突然我收到一个错误“方法不允许。” 从如下 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>
4

1 回答 1

0

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

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

进行了一些基础架构升级,并且在提交 html 表单时,WCF 的 POST 请求未正确生成。

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

于 2013-08-14T14:23:05.833 回答