自托管 WCF(Rest)仅允许 POST 方法
Self hosted WCF (Rest) allows only POST method
我的 WCF 服务是自托管的,我使用 WebServiceHost
使用以下代码进行托管:
WcfGatewayDatas.cs
public WcfGatewayDatas()
{
Uri baseAddress = new Uri("http://localhost:1478/");
this.Host = new WebServiceHost(this, baseAddress);
this.host.open();
}
我的基本界面是这样的(不用担心新的):
我WcfGatewayDatas.cs
[ServiceContract]
public interface IWcfGatewayDatas : IExposeDatas
{
[WebGet(/*Method="GET", */UriTemplate = "Alarms/Last")]
[OperationContract]
new JaguarEvitech.AgentService.SpyAlarm GetLastAlarm();
}
我的配置文件:
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="Wcf">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
<binding name="WcfBinding"/>
</basicHttpBinding>
</bindings>
<services>
<service name="MilestonePlugin.Background.ExposeDatas.WcfGatewayDatas">
<endpoint behaviorConfiguration="Wcf" binding="webHttpBinding" contract="MilestonePlugin.Background.ExposeDatas.IWcfGatewayDatas" address="GatewayJaguar"></endpoint>
</service>
</services>
</system.serviceModel>
服务启动后,我尝试使用网络浏览器访问 url (http://localhost:1478/GatewayJaguar/Alarms/Last),但我总是遇到相同的错误:方法不允许。唯一允许的是 post(无论我在我的界面 WebGet 或 WebInvoke 中写什么)。我错过了什么吗?
编辑:即使我的 url 与 WCF 函数不匹配,我也会遇到此错误。
WCF 默认仅使用 HTTP Post。 link 解释了如何选择使用 HTTP Get https://msdn.microsoft.com/en-us/library/bb628610(v=vs.110).aspx
好的,我找到问题了。问题是错误的 url 请求。我想请求 http://localhost:1478/GatewayJaguar/Alarms/Last but my program was listening on http://localhost:1478/Gatewayjaguar/GatewayJaguar/Alarms/Last。我更改了我的 uri,它现在可以正常工作了。
我的 WCF 服务是自托管的,我使用 WebServiceHost
使用以下代码进行托管:
WcfGatewayDatas.cs
public WcfGatewayDatas()
{
Uri baseAddress = new Uri("http://localhost:1478/");
this.Host = new WebServiceHost(this, baseAddress);
this.host.open();
}
我的基本界面是这样的(不用担心新的):
我WcfGatewayDatas.cs
[ServiceContract]
public interface IWcfGatewayDatas : IExposeDatas
{
[WebGet(/*Method="GET", */UriTemplate = "Alarms/Last")]
[OperationContract]
new JaguarEvitech.AgentService.SpyAlarm GetLastAlarm();
}
我的配置文件:
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="Wcf">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
<binding name="WcfBinding"/>
</basicHttpBinding>
</bindings>
<services>
<service name="MilestonePlugin.Background.ExposeDatas.WcfGatewayDatas">
<endpoint behaviorConfiguration="Wcf" binding="webHttpBinding" contract="MilestonePlugin.Background.ExposeDatas.IWcfGatewayDatas" address="GatewayJaguar"></endpoint>
</service>
</services>
</system.serviceModel>
服务启动后,我尝试使用网络浏览器访问 url (http://localhost:1478/GatewayJaguar/Alarms/Last),但我总是遇到相同的错误:方法不允许。唯一允许的是 post(无论我在我的界面 WebGet 或 WebInvoke 中写什么)。我错过了什么吗?
编辑:即使我的 url 与 WCF 函数不匹配,我也会遇到此错误。
WCF 默认仅使用 HTTP Post。 link 解释了如何选择使用 HTTP Get https://msdn.microsoft.com/en-us/library/bb628610(v=vs.110).aspx
好的,我找到问题了。问题是错误的 url 请求。我想请求 http://localhost:1478/GatewayJaguar/Alarms/Last but my program was listening on http://localhost:1478/Gatewayjaguar/GatewayJaguar/Alarms/Last。我更改了我的 uri,它现在可以正常工作了。