与REST服务中的REST服务进行通信

时间:2010-09-17 17:24:11

标签: c# wcf rest channelfactory

我使用以下代码与REST服务进行通信:

[ServiceContract()]
interface ISomeService
{
    [OperationContract()]
    [WebGet()]
    bool DoSomething();
}

WebHttpBinding binding = new WebHttpBinding();
ChannelFactory<ISomeService> channelFactory = new ChannelFactory<ISomeService>(binding, "http://localhost:12000");
channelFactory.Endpoint.Behaviors.Add(new WebHttpBehavior());
ISomeService service = channelFactory.CreateChannel();
service.DoSomething();

它在简单的测试应用程序中运行良好,但在我的实际应用程序中,我想在我自己的REST服务中调用它:如果调用我的REST服务,我的服务应该调用另一个REST服务。

有些事情变得奇怪了。在这种情况下,上面的代码不起作用,因为如果将它放在服务方法中,它会发送POST请求而不是GET请求,这当然会导致“Method not allowed”错误。我的代码中没有WebInvoke属性。

[ServiceContract()]
class MainService
{
    [OperationContract()]
    [WebGet()]
    public void Test()
    {
        CallDoSomething(); // code from above: Sends POST instead of GET request
    }
}

HTTP请求方法如何改变?

1 个答案:

答案 0 :(得分:2)

太棒了我在stackoverflow上找到了答案。 :)

WCF Proxy Using Post Even Though WebGet Attribute is Specified (Only when called from another WCF service) - Causes 405 Error

using (new OperationContextScope(service as IContextChannel))
{
    service.DoSomething();
}