我有以下问题。让我来描述我到目前为止所采取的步骤......
`
[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>
答案 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服务。我通过前进并通过代码访问服务来了解这一点。它有效。谢谢你的帮助