如何解决“InvalidOperationException:operation必须有一个类型为Stream的参数”

时间:2012-04-24 12:22:55

标签: .net wcf rest

浏览.svc服务文件时出错。 InvalidOperationException:对于操作中的请求,MethodName为流,操作必须具有单个参数,其类型为Stream“ 在服务合同中:

[OperationContract]
         [WebInvoke(RequestFormat = WebMessageFormat.Json,
           ResponseFormat = WebMessageFormat.Json,          
       BodyStyle = WebMessageBodyStyle.Bare,
      UriTemplate = "/upload?filename={filename}&objrid={objrid}")]
     string uploadfile(string filename, long objrid, Stream data);`

编译器不生成.svc文件。 虽然此操作工作正常。 但该服务中的其他方法无效。 我该如何解决这个问题?

web.config中的

: 服务标签:

  <service behaviorConfiguration="TransferServiceBehavior" name="namespace.Service">



    <endpoint address="/Service" behaviorConfiguration="webby" binding="webHttpBinding" contract="namespace.Icontract" />
<endpoint binding="basicHttpBinding" contract="namespace.Icontract" />

      </service>

behaviorConfiguration:

 <behavior name="TransferServiceBehavior">
      <serviceMetadata httpGetEnabled="false"/>
      <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
      <serviceDebug includeExceptionDetailInFaults="true"/>
      <serviceThrottling maxConcurrentCalls="500" maxConcurrentSessions="500" maxConcurrentInstances="500"/>
    </behavior>

绑定cinfig:                    

此操作正常运行,但同一服务合同中的其他操作无效: 其他行动:

[OperationContract]
    [WebGet(RequestFormat = WebMessageFormat.Json,
      ResponseFormat = WebMessageFormat.Json,
      BodyStyle = WebMessageBodyStyle.WrappedRequest,
      UriTemplate = "/ProcessViewRequestMobile")]
     Stream ProcessDownload();

当我评论第一次操作时,第二次操作正常。 我怎样才能使我的两种方法都有效。 我必须在同一服务合同中添加两种方法。 提前致谢。

1 个答案:

答案 0 :(得分:1)

好吧,您收到此错误,因为默认的WCF流格式化程序不支持此错误。你试试。都在同一种方法中。这只是不受支持,即使它似乎以某种方式工作。

如果这不是REST端点,您可以通过使用MessageContract将多个参数包装到一个类中来解决此问题。

如果这是一个REST端点或类似的自定义端点,实际上支持此编程模型,因为REST和其他一些场景都有自己的格式化程序,可以正确处理多个参数。但是,如果您继续看到此问题,请确保您的WebHttpBehavior设置正确。您还可以通过在绑定的TransferMode中选择“缓冲”选项来解决此问题。但这似乎打败了Streaming的整个目的。