突然间我收到错误'方法不允许'。从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>
答案 0 :(得分:0)
好的,这是一个背景,我们以编程方式生成带有HTML的电子邮件,其表单的行为是在提交html表单时调用WCF REST服务。
电子邮件客户端是用户用来阅读电子邮件的Outlook。
有一些基础设施升级,并且以某种方式提交html表单,WCF的POST请求未正确生成。
要解决此问题,我们将WCF服务从POST修改为GET,编写了一个Javascript方法来获取表单数据,并通过在WCF REST服务URI中包含html表单数据来调用WCF服务。