浏览.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();
当我评论第一次操作时,第二次操作正常。 我怎样才能使我的两种方法都有效。 我必须在同一服务合同中添加两种方法。 提前致谢。
答案 0 :(得分:1)
好吧,您收到此错误,因为默认的WCF流格式化程序不支持此错误。你试试。都在同一种方法中。这只是不受支持,即使它似乎以某种方式工作。
如果这不是REST端点,您可以通过使用MessageContract将多个参数包装到一个类中来解决此问题。
如果这是一个REST端点或类似的自定义端点,实际上支持此编程模型,因为REST和其他一些场景都有自己的格式化程序,可以正确处理多个参数。但是,如果您继续看到此问题,请确保您的WebHttpBehavior设置正确。您还可以通过在绑定的TransferMode中选择“缓冲”选项来解决此问题。但这似乎打败了Streaming的整个目的。