使用WCF Web apis(REST)来支持流数据

时间:2011-05-09 10:35:38

标签: wcf rest wcf-http

我有以下问题。让我来描述我到目前为止所采取的步骤......

  1. 我在Visual Studio中创建了一个新的WCF服务应用程序
  2. 然后我通过Nuget更新项目以获取最新的Web http libs(webapi.dll)
  3. 然后我创建了一个看起来像这样的服务方法
  4. `

    [ServiceContract]
    public interface IService
    {
            [OperationContract]
            [WebInvoke(Method="POST", UriTemplate="{value}")]
            string GetData(int value, Stream inputDocument);
    }
    

    `

    现在尝试在浏览器中查看我的 .svc 会导致错误显示“对于操作中的请求,GetData要成为流,操作必须具有单个参数,其类型为流

    我知道这是配置问题,我只是不知道 web.config 需要更改什么。请注意,这似乎是新HTTP之前WCF中的常见问题支持,我有点惊讶的是,这不适用于新的API。

    任何指针?

    由于

    [编辑]我已经包含了我的配置......

    <system.serviceModel>
        <services>
          <service name="MyService.Service" behaviorConfiguration="serviceBehaviour">
            <endpoint behaviorConfiguration="endPointBehaviour" address="" binding="webHttpBinding" contract="MyService.IService"/>
          </service>
        </services>    
        <bindings>
          <webHttpBinding>
            <binding transferMode="Streamed" name="webHttpBinding" />
          </webHttpBinding>
        </bindings>
    
        <behaviors>
          <endpointBehaviors>
            <behavior name="endPointBehaviour">
              <webHttp/>
            </behavior>
          </endpointBehaviors>
    
          <serviceBehaviors>
            <behavior name="serviceBehaviour">
              <serviceMetadata httpGetEnabled="true"/>
              <serviceDebug includeExceptionDetailInFaults="true" />
            </behavior>
          </serviceBehaviors>
        </behaviors>    
      </system.serviceModel>
    

2 个答案:

答案 0 :(得分:1)

您正在将新的WCF Web API内容与旧的WCF REST内容混合在一起。请查看HttpHelloResource示例,作为如何在IIS下运行Web API服务的最简单示例,或我的blog post,以获得在控制台中运行的更简单的服务示例。

至于接受一个流,我认为你最简单的选择是这样的操作:

[ServiceContract]
public interface IService
{
        [OperationContract]
        [WebInvoke(Method="POST", UriTemplate="{value}")]
        string GetData(int value, HttpRequestMessage request);
}

你可以通过

获取流
var stream = request.Content.ContentReadStream

答案 1 :(得分:0)

好的,所以似乎错误信息让我走错了路。我认为错误信息需要更具描述性。基本上我的代码完全没有错,将浏览器指向.svc文件是没有意义的,因为服务不是一个WCF服务。我通过前进并通过代码访问服务来了解这一点。它有效。谢谢你的帮助