我正在尝试使用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行动=创建
使用授权标题。
有人知道我做错了吗?
提前致谢。
答案 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>