不允许通过Azure Service Bus:405方法调用REST服务

时间:2015-03-02 19:45:55

标签: rest azure servicebus

我正在尝试使用Windows Azure Service Bus创建连接到REST服务的Windows Phone。

我开发了我的休息服务(它是一个Windows服务),现在我用fiddler来测试它。

但我一直收到错误“405方法不允许”。

我注意到的事情:

  • 我的服务在线,因为当我把它关闭时,小提琴手又给我一个错误。

  • 我的Servicebus已启动并正在运行,我可以在Azure门户网站上看到它。

这是我试图在C#中调用的操作

[WebInvoke(
//UriTemplate = "GetEmployees?Action=Get", // URI:"https://<MyBus>.servicebus.windows.net/GetEmployeesRest/GetEmployees?Action=Create"
UriTemplate = "GetEmployees?Action=Create", 
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.WrappedRequest)]

public DEVEmployee[] GetEmployees()
{

}

我在app.config中配置的网址是:

<baseAddresses>
<add baseAddress="https://<MyBus>.servicebus.windows.net/GetEmployeesRest/"/>
</baseAddresses>

我称之为:

的https://.servicebus.windows.net/GetEmployeesRest/GetEmployees行动=创建

使用授权标题。

有人知道我做错了吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

默认情况下,WebInvoke使用POST请求(WebGet使用GET请求)。如果您的客户端使用除POST请求之外的任何内容调用示例中的GetEmployees方法,则服务将以405响应。

可以覆盖默认的HTTP方法,如下所示:

[OperationContract]
[WebInvoke(Method="PUT", UriTemplate = "?Action:Create",
  RequestFormat = WebMessageFormat.Json,
  ResponseFormat = WebMessageFormat.Json,
  BodyStyle = WebMessageBodyStyle.WrappedRequest)]
void CreateEmployee(string id, string name);

如果您正在使用Fiddler进行测试,那么Composer允许您选择在提交请求时使用的方法。

如果您想从Fiddler进行测试而无需包含授权标头,则可以将此配置用于您的服务:

<bindings>
  <webHttpRelayBinding>
    <binding name="default">
      <security relayClientAuthenticationType="None" />
    </binding>
  </webHttpRelayBinding>
</bindings>